CPM1.TXT rev 1a 96-11-01
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      THIS DOCUMENT IS COPYRIGHT (C) 1988, 1996 BY HERNE DATA
      SYSTEMS LTD.  THE MATERIAL CONTAINED HEREIN MAY BE FREELY
      USED FOR PERSONAL INFORMATION ONLY.  IF YOU REPRODUCE IT,
      THIS COPYRIGHT NOTICE MUST NOT BE REMOVED.  THIS MATERIAL
      MAY NOT BE EXPLOITED FOR COMMERCIAL PURPOSES.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Herne Data Systems Ltd., 
PO Box 250, Tiverton, ON N0G 2T0 CANADA.  
Voice/fax 519-366-2732, 
e-mail herne@herne.com
internet: http://www.herne.com

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

An Introduction to C-128 CP/M
=============================

What is CP/M?

CP/M stands for 'Control Program/Monitor'.  It is not a
programming language, the way BASIC or Fortran is, but a micro
computer operating system, much like the KERNAL used in C-128
native mode and other 6502 based Commodore computers.  CP/M was
developed in the 1970's by Digital Research Inc.  (DRI) for Intel
8080 micro processor based computers that allows a given program
to run on a wide variety hardware configurations with little or
no changes.  It was later extended to run on Zilog Z80 based
computers as well as others.  (The Z80 used in the C-128 is
'upwardly compatible' with the 8080.  That is, its machine
language instruction set includes everything that the 8080 has
and more.)  With CP/M, a software developer has a uniform set of
basic operating system functions to work with (such as screen
output, keyboard input and disk access routines).  To the end
user, these system functions remained fixed, no matter what
computer the program is actually running on, thus providing a
very high degree of portability.  (You need only develop one
version of a program which operates under the CP/M system instead
of having a different version for brand x, y, and z computers.) 
For those who may be interested, there is also a 16-bit version
of CP/M designed to run on 8086/88 type computers called CP/M-86,
a multi user version called MP/M and a 16/32 bit version for the
MC68000 chip series called CP/M-68k.

CP/M is divided up into four main components:  the BIOS (Basic
Input Output System); the BDOS (Basic Disk Operating System), the
CCP (Console Command Processor) and the TPA (Transient Program
Area).  Each of these parts will be discussed in later chapters. 
Of the four parts, only the BIOS is hardware dependent.  It acts
as the messenger between the other parts of the system and the
actual hardware.  That is, a separate custom BIOS must be created
for each system that runs CP/M.

CP/M on the C-128

The version of CP/M used on the C-128 is termed 'CP/M Plus' or
'CP/M version 3'.  This is the latest 8-bit CP/M version, and is
also used on other recent CP/M based computers such as the Epson
QX-10, and TRS-80 Model 4.

The minimum configuration for running CP/M on the C-128 is the C-
128, one disk drive, and a 40 or 80 column monitor.  For speed
and ease of use, a fast disk drive (i.e. the 1571 or 1581) is
recommended along with the 80 column monitor.  For disk intensive
programs (many CP/M programs are), a 1700 or 1750 RAM expansion
unit is highly recommended as it can be used as a super fast RAM
disk.  A printer (device 4 or 5) along with a modem will round
out your system.  (Use of the modem requires CP/M release dated
DEC 85 or later.)

To start up CP/M on the C-128 or 128 D, put the CP/M BOOT disk in
disk drive device 8 and turn on the drive and then the computer
(in that order).  If the computer and drive are already on,
insert the boot disk, then press the reset button on the C-128 or
type in BOOT followed by pressing the <return> key.  After a few
moments and some sign-on status message screens, you will see a
prompt on the screen in the form of the letter A followed by a
'greater than' sign and a flashing cursor.  (A>_)  

Congratulations!  You have just started up CP/M successfully and
are ready to enter your first CP/M command.  Just for fun, type
in the letters D I R then press the key marked <return> at the
right side of the main keyboard.  A 'directory' or 'catalog' of
the contents of the boot disk should be displayed on the screen.

The Status Line

The bottom line of the screen display (i.e. the 25th line) on
either the 40 column or 80 column screen is used by CP/M as a
status line to display various system messages.  These are outlined
below.

Disk Status

C-128 CP/M has an optional disk status window displayed at the
bottom right corner of the screen.  The format of the status window
is as follows:

                                   O Dtt ss

where:      O     =Operation, either R or W indicating a Read or Write

            D     =the logical drive (A,B,C,D, etc)
            tt    =the track number currently being read or written
            ss    =the sector number currently being read or written

Normally,  the track and sector numbers are separated by a space. 
If the disk is formatted in MFM,  and the track and sector are
separated by a '-', then the second side of the disk is currently
being accessed.
You  can toggle this status window on or off by typing  the
<CONTROL>-<RUN/STOP>  key combination.  Note that window is also
erased temporarily, i.e. until the next disk access, when you (or
your application program) perform a screen clear.  

The disk status window is not used for RAM disk operations (i.e.
1700/1750 RAM expansion unit).  You may also note that, due to a
bug in the fast bus GCR sector translation routine, the sector
numbers displayed during reading and writing of both single and
double sided C-128 native GCR type CP/M disks are incorrect when
using a 1571 drive.  Correct numbers are, however, displayed when
using a 1541 drive to access these disks.

MFM Disk Type Selection

C-128 CP/M supports a number of industry standard MFM disk types
(such as KayPro, Osborne, IBM, Epson, etc.) when used with a 1571
disk drive.  However, CP/M sometimes cannot automatically
distinguish between two very similar disk types such as KayPro II
and KayPro IV.  For example, although the KayPro II is a single
sided disk and the KayPro IV is a double sided one, CP/M can
confuse the two because both have ten sectors of 512 bytes per
track, numbered 0 to 9 on side 0.  CP/M looks at the physical
format of side 0 to determine the foreign disk type.  When two or
more matches are found in its internal parameter table, you are
asked to manually chose which one you want.

When CP/M cannot uniquely identify the foreign disk format being
accessed, the program will pause momentarily and the disk type
window will open up at the center of the bottom line of the screen
to display the name of the first match, such as KayPro II, in
reverse video.  At this point there are several things that you can
do.  

First, if you are sure that the disk is of the type displayed,
simply press <return> or <enter>.  This will select the currently
displayed entry.  If you change disks, you will have to go through
the selection process over again.

Second, if you are going to be using this disk format repeatedly
and do not wish to re-select each time you change disks, you can
'lock in' the selected type by pressing <control>-<return>.  This
action has the effect of performing a burst mode 'forced login' on
the drive each time you change disks.  If you insert a new type of
disk while locked in, you will go back to the selection window.  

Note:       The forced login commands are different for the 1571 and
            1581 drives and therefore, <control>-<return> should not
            be used with a 1581 drive.  If you do use it on a 1581
            and change disks, the results may be unpredictable, even
            resulting in system crash.

The third option is used to display and select the alternate disk
choices.  Use the cursor left and cursor right keys in the cursor
control keypad (above the main keyboard) to scroll through the list
of choices.  In the example used above, the display should change
between KayPro II and KayPro IV.  When the correct entry is
highlighted, you can use either of the two methods outlined above
for making the selection.  Note that because you are in a suspended
program loop, nothing else can be done until you make a selection.

PAUSE

The  key  labeled NO SCROLL executes a PAUSE function.  Although
this key appears to have the same effect as typing <control>-s
(stop) and <control>-q (start) for pausing to read screen dumps, it
is not actually related in terms of the internal workings of the
operating system.  Using NO SCROLL sends the program into an
endless loop while displaying the message 'PAUSE' on the status
line.   Because of this, NO SCROLL cannot be used to pause a
display before pressing <control>-p to toggle the printer, or
<control>-c to abort execution of a program.  

To resume execution after a PAUSE function, press NO SCROLL again
(for AUG or DEC release only) or RETURN (for MAY release only).   

Disk Drives

C-128 CP/M supports a variety of different disk drives (virtually
any serial bus drive is either supported directly or can be easily
adapted).  However, since CP/M tends to be a disk intensive
operating system (i.e. it makes heavy use of temporary disk files,
overlay files, working files, etc.), a fast bus drive (i.e. a 1571
or 1581) is highly recommended for maximum disk access speed.

CP/M in general can support up to 16 disk drives, usually labeled
A: to P:.  On the C-128 implementation, normally only a maximum of
6 drives are actually supported.  In the default system
configuration, these are:

DRIVE             DEVICE

A:          serial port device 8, drive 0
B:          serial port device 9, drive 0
C:          serial port device 10, drive 0
D:          serial port device 11, drive 0
E:          serial port device 8, drive 0  (see 'Virtual Disk Drive'
            below)
M:          17xx RAM expansion unit  (see 'RAM Disk' below)

Virtual Disk Drive

The  physical disk drive A can be used as logical drive A or as the
'virtual' or 'phantom' logical  disk drive E.  Whenever  you 
access drive E (for example by doing DIR E:, or PIP E:=A:FILE1), 
the system will display a prompt on the status line asking you to
insert the diskette for drive E (respond by putting whatever
diskette you want into physical drive A,  then type <return>).  
The next time you access logical drive A,  the  system will prompt
you to insert the A diskette in drive A.  Again, insert the desired
diskette and type <return>.  Note that CP/M does not actually check
to see if you in fact changed the disk.  It will accept whatever is
in the drive when you press <return> as being the correct disk.

RAM Disk

When the 1700 (128k byte) or 1750 (512k byte) RAM expansion unit
(REU) is connected to the C-128 in CP/M mode, it becomes an ultra
fast RAM disk, normally assigned to CP/M drive M:.  That is, any
CP/M command or transient utility can access the REU as drive M:,
just like it can any other 'disk drive' connected to the system. 
Note that this is totally separate from the virtual disk drive
discussed above. 

Unlike a physical disk drive, the contents of the RAM disk are not
preserved when the C-128 is turned off.  However, the contents are
preserved when the reset button is pressed momentarily to re-boot
the system, even if you enter C-128 native mode or C-64 mode before
returning to CP/M mode (providing, of course, you do not alter the
contents either accidentally or intentionally by running some other
program while in one of these other operating modes).

Note that in order to use the RAM disk, you must have the C-128
CP/M release dated 6 DEC 85 or later.

The Screen

C-128 CP/M supports both the 40 column and 80 column display
screens.  The screen which is initially active is determined by the
position of the 40/80 switch on boot up.  After booting, the screen
can be selected using the DEVICE utility (see Chapter 3) or
equivalent.  The screen can be changed during the execution of a
user program by setting the CONOUT redirection flag in the system
control block (see Chapter 9).

The 40 column screen is configured as a window on a larger 80
column 'virtual' screen.  This allows commands and programs to
think that they are dealing with an 80 column wide screen (the
default width for most CP/M programs). Use <control>-<left arrow>
and <control>-<right arrow> to scroll the window across the virtual
screen (see Arrow Keys, below).

Printer Support
      
C-128 CP/M can support two printers, serial port devices 4 and 5. 
In its default configuration, device 4 (CP/M physical device
PRT1) is assigned to the logical LIST device with a secondary
address of 7 and ASCII to PET-ASCII translation enabled.  To
change to a device 5 printer, use the DEVICE utility (see Chapter
3).  To disable ASCII to PET-ASCII translation, use the CONF
utility.
 
The Keyboard

The operation of the C-128 keyboard is slightly different in CP/M
mode than it is in native mode.  For one thing, it uses the
standard 7 bit ASCII character set rather than the PET-ASCII set
used in native mode.  In addition, each key is completely
programmable as to its character codes or other special 
functions.   Other differences in keyboard operation are outlined
below.

Alpha Keys

The alpha keys on the main keyboard (e.g. A, B, C, D, etc.)
generate the standard lower case,  upper case, CAPS LOCK and
control values.  The CAPS LOCK value defaults to the upper case
value and is used as a software shift lock.  It is not related to
either the SHIFT LOCK key or the CAPS LOCK key.  To turn the CAPS
LOCK mode on, press the Commodore logo C= key at the lower left
of the main keyboard.  Pressing the same key again, will turn off
CAPS LOCK mode.

Numeric Keys

The numeric keys (the row of keys above the alpha keys) produce
the appropriate number as the unshifted value and the CAPS LOCK
value,  the symbol above the number on the key as the shifted
value and the color on the side of the key (the top one of the 
two colors shown) as the control value.   These colors are
defined as 80 column foreground colors.   The control value
produced by the numbers on  the numeric keypad are defined the
same as those on the numeric keys,  except that they generate 80
column background colors.

Arrow Keys

The arrow keys are located in the cursor keypad above the top
right portion of the main keyboard.  The functions and character
codes assigned to these keys in CP/M mode are different to those
assigned to the cursor control keys at the lower right of the
main keyboard.  The default values for the arrow  keys are those
use used by most application programs which feature full screen
cursor movement, such as text editors, etc.  

The up arrow key generates the value 05 (<control>-e) as the
unshifted, shifted and  CAPS LOCK  values;   it generates the
hexadecimal  12  (<control>-r) as the control value.

The down arrow key generates the hexadecimal value 18 (<control>-
x) as the unshifted,  shifted and CAPS LOCK values; it generates
the value 03 (<control>-c) as the control value.

The left arrow key generates the hexadecimal value 14 (<control>-
s) as the unshifted,  shifted and CAPS LOCK values;  it executes
the 40 column screen left function as the control value.
The right arrow  key generates the value 04 (<control>-d) as the
unshifted,  shifted and CAPS LOCK values;  it executes the 40
column screen right functions as the control value.

Additional ASCII Characters

The  key labeled as a British pound sign generates the character
'#' as  the unshifted, shifted and CAPS LOCK values.   The
reverse apostrophe character ` is generated as the control value.
  
The  up arrow key next to the <RESTORE> key generates the caret
character '^' as the shifted and control values.   The pipe
character '|' is generated as the  unshifted and CAPS LOCK
values.  

The  '='  key  generates  the character '='  as  the  unshifted, 
shifted and CAPS LOCK values.  The tilde character '~' is
generated as the control value.

The  '/'  key  generates  the character '/'  as  the  unshifted, 
shifted and CAPS LOCK values.  The back slash character '\' is
generated as the control value.

The  key labeled 'INST DEL' generates the hexadecimal value 7f
(ASCII rubout) as the unshifted, shifted and CAPS LOCK values;
the hexadecimal value 16 (<control>-v) is generated as the
control value.

Special Key Functions

The  key  labeled NO SCROLL executes a PAUSE function.  To
resume execution, press NO SCROLL again (for AUG or DEC version
only) or RETURN (for MAY version only).   The control value of 
the  NO  SCROLL key toggles between two modes (on/off) of
automatically tracking the CP/M screen on a 40 column monitor.

The  right and left arrows at the top of the keyboard initiate
the special functions screen right  and  screen  left 
respectively  (40  column  screen tracking) as their control
values.

The key labeled <ENTER> generates a Carriage Return as the
unshifted, shifted and CAPS LOCK values.   The control value
initiates the special function boot, which reboots the system as
if the reset button has been pressed.  If a CP/M boot disk is in
drive A:, the CP/M system will be re-started, otherwise normal C-
128 native mode will be started.

The key labeled <RUN/STOP> is undefined as its unshifted,
shifted and CAPS LOCK values,  and  toggles the
display/nondisplay of the disk status window as its control
value.

The  key  labeled  CRSR with up and down arrows (bottom right on
main keyboard) generates  the hex value 17 (<control>-w) which
causes the latest CP/M command line to be re-typed on the screen. 
The key next to this (CRSR with right and left arrows) allows you
to move right (<control>-f) and left (<control>-a) (unshifted and
shifted, respectively) through a command line to edit it. 

The key labeled F1/F2 generates the two character string 'F1' in
the unshifted and CAPS LOCK modes and the string 'F2' in the
shifted and control modes.

The key labeled F3/F4 generates the four character string 'dir
<return>' in the unshifted and CAPS LOCK modes and the string
'dir' in the shifted and control modes.

The key labeled F5/F6 generates the two character string 'F5' in
the unshifted and CAPS LOCK modes and the string 'F6' in the
shifted and control modes.

The key labeled F7/F8 generates the two character string 'F7' in
the unshifted and CAPS LOCK modes and a string representing the
date that the system files were assembled in the shifted and
control modes (i.e. the date which is displayed in the sing-on
message).

The key labeled HELP generates the string 'Help' in all modes.

      

The Command Line
  
CP/M commands and transient programs are accessed from the system
prompt by typing in a sequence of characters called a command
line.   A CP/M command line is composed of a command,  an
optional command tail, and a carriage return.  The command is the
name or filename of a program to be executed.  The optional
command tail can consist of a drive specification, one or more
file specifications, and some options or parameters.

        A>COMMAND {command tail} <cr>

               
Command Conventions

The following special symbols define the syntax of a normal
command line.

      {}          surrounds an optional item.
      |           separates alternative items in a command line.
      <cr>        indicates a carriage return.
      ^           indicates the Control Key.
      n           substitute a number for n.
      s           substitute a string (group) of characters for s.
      o           substitute an option or option list for o.
      []          type square brackets to enclose an option list.
      ()          type parentheses to enclose a range of options
                  within an option list.
      RW          Read-Write attribute - opposite of RO
      RO          Read-Only attribute - opposite of RW
      SYS         System attribute - opposite of DIR
      DIR         Directory attribute - opposite of SYS
       ...        preceding element can be repeated as many times as
                  desired.
      *           wildcard: replaces all or part of a filename
                  and/or filetype.
      ?           wildcard: replaces any single character in the
                  same position of a filename and/or filetype.

Command Line Editing

The resident CP/M command interpreter (CCP) allows a certain
degree of editing of the CP/M command line before pressing the
<return> key.  The editing keys are outlined below along with
their usage.  It should be noted that these editing keys are
totally independent from the control codes used by the terminal
emulation for the video display.

  Control Character           Function

  CTRL-A                moves cursor one character to the left.  

  CTRL-B                moves cursor from beginning to end of command
                        line and back without affecting command.
  
  CTRL-C                stops executing program  when  entered  at 
                        the system prompt or after CTRL-S.

  CTRL-E                forces a physical carriage return without
                        sending command. 

  CTRL-F                moves cursor one character to the right. 

  CTRL-G                deletes character at current cursor position
                        if in  the middle of a line. 

  CTRL-H                delete character to the left of cursor.

  CTRL-I                same as the TAB key.

  CTRL-J                moves cursor to the left of the command line
                        and sends command to  CP/M.  Line  feed,  has 
                        same effect as carriage return.

  CTRL-K                deletes character at cursor and all
                        characters to the right.

  CTRL-M                same as carriage return.

  CTRL-P                echoes console output to the list device.

  CTRL-Q                restarts screen scrolling after a CTRL-S.

  CTRL-R                retypes the characters to the left of the
                        cursor on a new line; updates the command
                        line buffer.

  CTRL-S                stops screen scrolling.

  CTRL-U                updates the command line buffer to contain
                        the characters to the left of the cursor;
                        deletes current line.

  CTRL-W                recalls previous command line if current line
                        is empty; otherwise moves cursor to end of
                        line.  CTRL-J,-M,-R,-U and RETURN update the
                        command line  buffer  for  recall  with CTRL-
                        W.  

  CTRL-X                deletes all characters to the left of the
                        cursor.

Filespec

CP/M identifies every file by its unique file specification,
which can consist of four parts: 

            the drive specification, 
            the filename, 
            the filetype and 
            the password.   

The term "filespec" indicates any valid combination of the four
parts of a file specification, all separated by their appropriate
delimiters.  A colon must follow a drive letter.  A period must
precede a filetype.  A semicolon must precede a password.

The general symbols and rules for the parts of a file
specification follow:

  d:              drivespec   optional    single alpha character (A-P)
  filename        filename                1-8 letters and/or numbers
  typ             filetype    optional    0-3 letters and/or numbers
  password        password    optional    0-8 letters and/or numbers

If you do not include a drive specifier, CP/M automatically uses
the default drive. Valid combinations of the elements of a CP/M
file specification are:

                filename
                d:filename
                filename.typ
                d:filename.typ
                filename;password
                d:filename;password
                filename.typ;password
                d:filename.typ;password

Some CP/M commands accept wildcard (* and ?) characters in the
filename and/or filetype parts of the command tail.  A wildcard
in the command line can in one command reference many  matching
files  on  the  default  or specified user number and drive.  
This is sometimes referred to as an 'afn' or ambiguous
filename.  If no wildcards are present, an 'ufn' or unambiguous
filename results.

CPM2.TXT rev 1a 96-11-01
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      THIS DOCUMENT IS COPYRIGHT (C) 1988, 1996 BY HERNE DATA
      SYSTEMS LTD.  THE MATERIAL CONTAINED HEREIN MAY BE FREELY
      USED FOR PERSONAL INFORMATION ONLY.  IF YOU REPRODUCE IT,
      THIS COPYRIGHT NOTICE MUST NOT BE REMOVED.  THIS MATERIAL
      MAY NOT BE EXPLOITED FOR COMMERCIAL PURPOSES.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Herne Data Systems Ltd., 
PO Box 250, Tiverton, ON N0G 2T0 CANADA.  
Voice/fax 519-366-2732, 
e-mail herne@herne.com
internet: http://www.herne.com

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Internal CCP Commands
=====================

CP/M's resident command line interpreter, the CCP (Console Command
Processor) is  a special kind of transient program comprised of two
main parts: a program loader module and a resident command module. 
Both parts are contained in the file CCP.COM, which is
automatically loaded from the default drive (normally drive A:) by
CP/M during the cold boot-up process (i.e. initial start up of
CP/M).  System control is then passed to the CCP which initializes
a number of system parameters, copies itself to a buffer in bank 0,
then displays the familiar CP/M system prompt (A>) and awaits your
instructions.  (Note: There are numerous CCP replacement programs
available which add to or enhance the commands available in the
standard CCP.  These are not described in this book)

The program loader module of the CCP is used to read transient
utilities from disk into the Transient Program Area, or TPA, then
pass control to the transient program.  It moves itself into the
top of the TPA so that it can load the required file into the
beginning of the TPA without overwriting, and thus corrupting,
itself in the process.  Because some space is required at the top
of the TPA, the largest file which can be loaded by the CCP is 58
k bytes, on the AUG version of C-128 CP/M and 59 k on the DEC and
MAY versions.  Upon completion of the transient program, the CCP is
re-loaded from the buffer in bank 0 back into the TPA to await the
next instruction.

The command module of the CCP contains six fundamental commands as
outlined below.  Note that the resident version of these commands
is generally a 'plain vanilla' variety in that if you want to do
anything fancy like access password protected files or invoke
command options, you need to use an extended transient version of
the command.  The transient equivalents are stored as separate disk
files with the same name as the internal commands and a file type
of COM.  If you want to bypass the resident versions and access the
full transient versions directly, precede the command name with a
drive specifier.  For example:  DIR <return> will default to the
internal command DIR, while A:DIR <return> will access the
transient command DIR.COM on drive A:.  The transient versions of
each command are detailed in document "External Utilities".

Changing the Current Drive

The currently logged or default disk drive is the drive where CP/M
looks for files if no drive specifier is explicitly included in the
filespec.  The currently logged drive is displayed as part of the
system prompt in the form of:

            [user#][drive] >

such as 2A> to indicate that the system is currently logged onto
user area 2 on drive A:.

To change the current drive, type in the new drive letter followed
by a colon and a <return>.  For example:

      b: <return>
or    B: <return>

will change the currently logged drive to B:.  If you are already
logged onto drive B:, nothing will appear to happen.  However, if
you are logged onto another drive, the systems prompt will be
changed to reflect the new drive.  Changing the drive does not
change the user area.  For example, if you were logged on to USER
2  on drive A:, then switched to drive B:, you would be logged on
to USER 2 on drive B:.  See USER below to change the user area.

CP/M, in general, supports up to 16 logical drives, labeled A: to
P:.  The physical  nature of the logical drives is totally
transparent to CP/M commands and programs. These may be any
combination of floppy drives, hard drives, RAM disks and other
special devices.  In addition, more than one logical drive can be
mapped to a single physical drive.  On the standard C-128
implementation, only 5 or 6 logical drives are actually used. 
These are:

DRIVE             DEVICE

A:          serial port device 8, drive 0
B:          serial port device 9, drive 0
C:          serial port device 10, drive 0
D:          serial port device 11, drive 0
E:          serial port device 8, drive 0  
            (The virtual drive shares physical drive A:)
M:          17xx RAM expansion unit       (The RAM disk on CP/M versions
                                          dated 6 DEC 85 or later.)

The default device and drive numbers can be readily changed using
a program such as CONF.COM.

Soft Reset

If you type in a <control>-C (i.e. hold down the key marked
'CONTROL', while pressing the C key) at the system prompt, all
currently logged-in disk drives will become 'un-logged-in'.  This
has the effect of re-setting the disk system and cancelling all
previous disk error conditions.  This is also know as a 'warm boot'
or 'soft start'. 

If during the course of running an internal command or a transient
utility, the system aborts with an error message that starts of
similar to:

      BDOS Error on ... (etc) or

      BIOS Error on...(etc)

then it is a wise idea to reset the disk system with a <control>-C
before trying anything else.  Failing to do so, may just result in
the command being ignored and the error condition reported again.

<control>-C is also used by the resident commands, and many
transient commands as well, as a general "stop-what-you-are-doing-
and-return-to-system-level" command.  That is, it will terminate
directory displays, TYPE displays, etc.  It should be noted that
many transient programs will trap the <control>-C key press and use
the command for their own purposes, such as a custom exit routine.

NOTE:       <control>-C should be used with caution from within a
            transient program, especially if you do not know the
            command structure of the program.  It may terminate the
            program and leave you out in the cold with no practical
            way to recover any data that you may have previously
            entered but not saved.  For your own programs, you can
            disable <control>-C by using BDOS function 6Dh, described
            in the document "The CP/M BDOS".

DIR

The DIR command displays the names of files and, optionally the
characteristics associated with the files. It has three forms:

          DIR
          DIRSYS
          DIR (with Options)

DIR and DIRSYS are CCP resident commands.   DIR (with Options) is
a transient utility and must be loaded into memory from the disk. 
DIRSYS can be abbreviated to DIRS.  The general syntax for both DIR
and DIRS is:

                  DIR  {d:}
                  DIR  {ambiguous filespec}

                  DIRS {d:}
                  DIRS {ambiguous filespec}

The DIR and DIRS resident commands display the names of files
cataloged in the current user area of the directory of a disk.  DIR
lists the names of files in the current user number that have the
Directory (DIR) attribute set.  These would include most, if not
all, normal files on the disk.  (When a file is created, it is
normally given the directory attribute unless you specifically set
one of the other available attributes using the SET command or its
BDOS function call equivalent.)  DIRS lists all files on the disk
with the System (SYS) attribute set.  If system files are present
on a disk subjected to the DIR command, then the directory display
will also include the message:

      System file(s) exist.

Similarly, if files with the DIR attribute exist on a disk
subjected to the DIRS command, then the message:

      Non-System file(s) exist

will appear along with the directory listing.  If no files are in
the current user area on the disk, then the message 'No File' is
displayed.    DIR and DIRS will accept ambiguous filename
references (using the * and ? wildcards) in the file specification
for global pattern matching.   

For example:

Command                 What it does

DIR                     Displays all files in the current user area on
                        the current drive that  have the Directory
                        (DIR) attribute set.

DIR B:                  Displays all DIR files in the current user
                        area on drive B:.

DIR C:MYFILE.DAT        Displays the name MYFILE.DAT if the file is in
                        the current  user area on drive C:.

DIR *.BAS               Displays all DIR files with filetype BAS in
                        the current user area on the current drive.

DIR X*.C?D              Displays all DIR files in the current  user
                        area and drive whose filename begins with the
                        letter X, AND whose three character filetype
                        contains the first character C and last
                        character D.

DIRS                    Displays all files in the current user area
                        and drive that have the system (SYS) attribute
                        set. 

DIRS *.COM              Displays all SYS files with filetype COM in
                        the current user area and drive.  Note that a 
                        command (.COM)  file in user 0  with the
                        system attribute can be accessed from any user
                        number on that drive,  and from any drive in
                        the search chain (see SETDEF in "External
                        Utilities").

      
ERASE

The ERASE command removes one or more files from the directory of
a disk.  Ambiguous file references containing wildcard characters
('*' and '?') are acceptable in the filespec for deleting more than
one file which may match the specified pattern.  Directory and data
space on the disk are automatically reclaimed for later use by 
another  file.  ERASE can be abbreviated to ERA.  

Note:       the directory entry associated with the specified file(s)
            is not actually removed from the disk directory.  The
            first character of the directory field is changed to a
            hex E5 to indicate an unused entry which remains there
            until the space is reclaimed by creating a new file.  The
            old file can be recovered by special programming
            techniques until either its directory entry, or its
            allocated space has been re-used.

The syntax of the ERASE command is:

       ERASE {ambiguous filespec} 

For example:

Command                 What it does

ERASE TEST.BAS          Removes the file TEST.BAS from the current
                        user area in the current drive.

ERA *.PRN               All files with the filetype PRN are removed
                        from the current user area in the current 
                        drive.  Note that when a wild card is used in
                        the filespec, ERASE will prompt you to confirm
                        that you wish to perform the operation.

ERA C:*.*               All files in the current user area on drive C:
                        are removed from the disk.  As above, you will
                        be prompted to confirm your request.

ERA M?X.?M              All files which have a name that is 2 or 3
                        characters long that begins with M and ends in
                        X (such as MIX, MAX, MX) AND a file type of
                        one or two characters that ends with M (such
                        as M, AM, DM) will be erase from the current
                        user area in the current  drive.  

RENAME

RENAME lets you change the name of a file in the directory of a
disk.  The files are not physically moved or copied, only the name
in the directory is changed.  To change several filenames in one
command use the * or ?  wildcards in the file specifications. 
RENAME can be abbreviated to REN.  RENAME with no {filespec}
prompts you for input.  The syntax is:
       RENAME {new_filespec=old_filespec}

Some examples are:

Command                       What it does

REN FILE1.BAS=FILE2.BAS       The file FILE1.BAS changes to FILE2.BAS
                              on the current drive and user area.

RENAME                        The system prompts for the filespecs:

                                    Enter New Name:         X.PRN
                                    Enter Old Name:         Y.PRN
                                    Y      .PRN=X        .PRN
          
                              File X.PRN is then renamed to Y.PRN on
                              drive A:.

REN A:PRN.NEW=PRN.OLD         The file PRN.OLD on drive A: changes to
                              PRN.NEW.

RENAME X*.BAK=Z*.DOC          This command renames all the files
                              matching Z*.DOC to files with filenames
                              S*.BAK.

REN B:NEW=B:OLD               The file OLD changes to NEW on drive B:. 
                              Since the second drive specifier, B: is
                              implied by the first one, it is
                              unnecessary in this example.  The command
                              line above has the same effect as the
                              following:

                                    REN B:NEW=OLD
                                          or
                                    REN NEW=OLD

However, you cannot RENAME across drives.  Therefore:  

      REN A:FILE=B:FILE

is not legal.

TYPE
The TYPE command displays the contents of an ASCII character file
on your screen. (Strictly speaking, TYPE will display the contents
of any file, but only ones with ASCII text, or WordStar style text,
will make any sense when viewed.)  TYPE will NOT accept wildcards
in the filename.  The general syntax is:

          TYPE {unambiguous filespec}

      For example,

Command                 What it does

TYPE LETTER.DOC         Displays the contents of the file LETTER.DOC
                        from the current drive on your screen.

TYPE B:LETTER.DOC       Displays the contents of the file LETTER.DOC
                        from drive B: on your screen. 

You can also get a printed copy of the file by pressing <control>-P
using TYPE to toggle the printer echo on.  Everything that is
displayed on the screen will then be echoed to the printer.  To
start printing in the middle of a display, press <control>-S to
stop the display, then <control>-P to activate the printer and
<control>-Q to resume the display.  Only text which is displayed
after the <control>-P will be echoed to the printer.

TYPE will normal display 23 lines, then prompt to press a key for
the next page.  This feature can be de-activated using the [NO
PAGE] option of the TYPE.COM transient utility.  

You can press <control>-C to abort the display at any time.

USER

The USER command sets the current user number.    The disk
directory can be sub-divided into distinct areas, generally called
a 'user area' according to a "User Number."  User numbers range
from 0 through 15.  These can be considered to be a form of a
subdirectory, although the directory entries for all user areas
occupy part of the same physical directory area on the disk.  The
default user area is 0.

Files located in one user area are not generally accessible from
other user areas without special programming techniques.  The
general exception to this rule is files in user 0 which have the
system attribute set.  These files are available in all user areas. 
File copying programs such as PIP can copy from any user area to
any other one, provided that PIP is accessible in the currently
selected user area.  

Note that the currently selected user number is the same for all
drives.   That is, if you are on drive A: in user area 4, changing
to drive B: will automatically put you into user area 4 on drive
B:.  The current user area is displayed as part of the system
prompt in the form of:

            [user#][drive] >

such as 2A> to indicate that the system is currently logged onto
user area 2 on drive A:.

The syntax for the USER command is:

                  USER {number}

where {number} is the desired user area, expressed as a decimal
number from 0 to 15.  For example,

Command                 What it does

USER                    The CCP prompts you to enter the desired user
                        number:

                              Enter User#:
 
                        To which you can respond:           5

                        and the current user number will be set at 5. 
                        This is indicated by the system prompt which
                        will read 5A> (if drive A: is currently
                        selected as the default drive).

USER 3                  This command changes the current user number
                        to 3.

Note:       The USER command does not reserve certain segments of the
            disk for a given area, nor does it create special
            additional directory areas or sub-directories.  The files
            for all 'user areas' are physically mixed on the disk. 
            Files for each area are identified in the directory by a
            control byte in the directory entry.  (See "The Disk
            System" for additional information.) 

CPM3.TXT rev 96-11-07
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  THIS MATERIAL MAY NOT BE EXPLOITED FOR COMMERCIAL PURPOSES.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Herne Data Systems Ltd., 
PO Box 250, Tiverton, ON N0G 2T0 CANADA.  
Voice/fax 519-366-2732, 
e-mail herne@herne.com, 
internet: http://www.herne.com

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

External Utilities

External CP/M commands, commonly referred to as 'transient
programs' are used to perform functions which are too complex or
specialized for the resident command interpreter. The external
commands include extensions to the CCP internal commands as well
as utilities and user applications. The programs reside on disk
in the form of a file with the file type .COM. When the program
is called from the CCP command line, it is loaded from disk into
the Transient Program Area (TPA), beginning at address 0100 hex
in Bank 1 of RAM.

This document outlines the standard CP/M external utilities as
supplied with your system disk. It does NOT include specific
application programs such as word processors or spreadsheets. The
following notation is used in the syntax descriptions, according
to standard CP/M conventions:

{ }  Curly braces are used to indicate optional input, generally
     in the form of a file specification. The user does NOT type
     in the braces.

[ ]  Square brackets are used to indicate 'switches' to enable or
     disable various options. The user MUST type in the left hand
     (leading) square bracket, while the right hand (trailing)
     bracket is optional. In most cases, the options can be
     specified with only one or two characters, instead of
     spelling out the entire word and several switches may be
     included in the same set of brackets.

|    The ASCII pipe (or vertical bar) is used to separate various
     optional formats in the command line specification. The pipe
     is NOT typed in on the command line. For example, if the
     command line states: {NAMES | VALUES}, you may use either
     the option NAMES or the VALUES on the command line, but
     normally not both simultaneously.

unambiguous filespec     The unambiguous filespec, or ufn, is
                         used to uniquely specify a single file.
                         It consists of an optional logical drive
                         specifier (such as D:) followed by a
                         primary filename of from one to eight
                         ASCII characters, a period and a
                         filetype extension of up to three
                         characters, such as A:TESTFILE.DOC. The
                         ufn must NOT contain any of the
                         following special characters:

                              < > , . ; : = [ ] * ?

ambiguous filespec  The ambiguous filespec, or afn, is similar to
                    the ufn, except it MAY contain the '*' and/or
                    '?' wild card characters. It is used to
                    specify a 'pattern' for performing an
                    operation on a group of files with similar
                    names. The '*' character will match all
                    remaining characters in a filename or
                    extension, regardless of the number of
                    characters specified. (For example, the afn
                    A:TE*.C?M will match all files on drive A:
                    which have (two or more characters in the
                    filename AND begin with TE) AND (a file
                    extension that starts with a C and ends with
                    an M) such as: TEST.COM, TEXT.CDM, TENT.CM,
                    but NOT examples such as CTEXT.COM or
                    TEST.OCM.)

DATE
====
The DATE command lets you display or set the current system date
and time of day.  The date is displayed in the MM/DD/YY format,
where MM is the month (1 = January, 12 = December), DD is the
day; and YY is the year.  The time is displayed in a 24 hour
military format, and includes hours, minutes and seconds. The
general syntax is:

               DATE {CONTINUOUS}
               DATE {time-specification}
               DATE SET

With the {time-specification}, all fields must be included. For
example:

Command             What it does

DATE                Displays the current date and time, then
                    returns to the CCP command prompt..

DATE C              Displays the date and time continuously,
                    until you press a key, then returns to the
                    CCP command prompt.

DATE 06/12/89 11:30:0    Sets the date and time as specified
                         (June 12, 1989, 11:30:00 am, in this
                         case).

DATE SET            Prompts for new date and time entries.

DEVICE
======

DEVICE displays current logical device assignments and physical
device names; assigns logical devices to peripheral devices
attached to the computer; sets the communications protocol and
speed of a peripheral device; and displays or sets the current
console screen size.

     The general syntax is:

       DEVICE { NAMES | VALUES | physical-dev | logical-dev}
       DEVICE logical-dev=physical-dev {option}
                   {,physical-dev {option},...}
       DEVICE logical-dev = NULL
       DEVICE physical-dev {option}
       DEVICE CONSOLE [ PAGE | COLUMNS = columns | 
                                   LINES = lines]

 The device {options} are:

         [ XON | NOXON | baud-rate ]

XON            refers to the XON/XOFF communications protocol.

NOXON          indicates no protocol and the computer sends data
               to the device whether or not the device is ready
               to receive it.

baud-rate      is the speed of the device.   The system accepts
               the following baud rates:

                    50   75   110  134
                    150  300  600       1200

               The following baud rates are 'legal' but are not
               physically reliable with the C-128 CP/M mode due
               to processor speed, software overhead, etc.:
               
                    1800   2400     3600     4800
                    7200   9600     19200

The following are legal physical devices under the C128 CP/M
implementation:

     Name      Function
     ------------------------------------------------------------
     KEYS      keyboard
     40COL     40 column monitor
     80COL     80 column monitor
     PTR1      Commodore Serial Printer (Serial Bus Device 4)
     PTR2      Commodore Serial Printer (Serial Bus Device 5)
     RS232     RS-232 User port (DEC and later versions only)

     For example:

Command             What it does

DEVICE              Displays the physical devices and current
                    assignments of the logical devices in the
                    system.

DEVICE NAMES        Lists the supported physical devices with a
                    summary of the device characteristics.

DEVICE VALUES       Displays the current logical device
                    assignments.
DEVICE 80COL        Displays the attributes of the physical
                    device 80COL.

DEVICE CON          Displays the assignment of the logical device
                    CON:

DEVICE LST:=NULL    Disconnects the list output logical device
                    (LST:).

DEVICE CONSOLE [PAGE]    Displays the current console page width
                         in columns and length in lines.

DEVICE CONSOLE [COLUMNS=40 LINES=16]

                         Sets the screen size to 40 columns and
                         16 lines.

DIR
===
The DIR command displays the names of files and the
characteristics associated with the files. The DIR command has
three distinct references:

               DIR
               DIRS
               DIR (with Options)

DIR and DIRS are CCP resident commands and are outlined in the
document "Internal Commands". The DIR command with options is an
enhanced version of the DIR built-in command and displays your
files in a variety of ways. DIR can search for files on any or
all drives, for any or all user numbers. One or two letters is
sufficient to identify an option. You need not type the right
hand square bracket.

               DIR {d:} [options]
               DIR {filespec} {filespec} ... [options]

 Option        Function

 ATT           displays the file attributes.

 DATE          displays date and time stamps of files.

 DIR           displays only files that have the DIR attribute.

 DRIVE=ALL     displays files on all on-line drives.

 DRIVE=(A,B,C,)displays files on the drives specified.

 DRIVE=d       displays files on the drive specified by d.

 EXCLUDE       displays files that DO NOT match the files
               specified in the command line.

 FF            sends an initial form feed to the printer device
               if the printer has been activated by CTRL-P.

 FULL          shows the name, size, number of 128-byte records,
               and attributes of the files. If there is a
               directory label on the drive, DIR shows the 
               password protection mode and the time stamps. If
               there is no directory label, DIR displays two file
               entries on a line, omitting the password and time
               stamp columns. The display is alphabetically
               sorted. (See SET for a description of  file
               attributes, directory labels, passwords and
               protection modes.)

 LENGTH=n      displays n lines of printer output before
               inserting a table heading. n is a number between 5
               and 65536.

 MESSAGE       displays the names of drives and user numbers DIR
               is searching.

 NOSORT        displays files in the order it finds them on the
               disk.

 RO            displays only the files that have the Read-Only
               attribute.

 RW            displays only the files that are set to Read-
               Write.
    
 SIZE          displays the filename and size in kilobytes (1024
               bytes).
    
 SYS           displays only the files that have the SYS
               attribute.
    
 USER=ALL      displays all files in all user numbers for the
               default or specified drive.
    
 USER=n        displays the files in the user number specified by
               n.
    
 USER=(0,1...) displays files under the user numbers specified.

For example:

Command             What it does

DIR C: [FULL]       Displays full set of characteristics for all
                    files in the current user area on drive C:.
    
DIR C: [DATE]       Lists the files on drive C: and their dates,
                    if time and date stamping has been
                    initialized on the disk.
    
DIR D: [RW,SYS]     Displays all files drive D: with Read-Write
                    and System attributes.
    
DIR [US=ALL, DR=ALL]     Displays all the files in all user
                         numbers (0-15) on all on-line drives.
    
DIR [exclude] *.DAT      Lists all the files on current drive and
                         user that do not have a filetype of
                         .DAT.
    
DIR [SIZE] *.PLI *.COM   Displays all the files of type PLI, and
                         COM in size display format.
    
DIR [DR=AL US=AL] TEST   Displays the filename TEST. if it is
                         found on any drive in any user number. 
                         (This is a handy way to search for files
                         if you do not remember where they are).
    
DIR [size,rw] D:         Lists each Read-Write file that resides
                         on drive D:, with its size in kilobytes.
                         Note that D: is equivalent to D:*.*.

DUMP
====
     
DUMP displays the contents of a file in hexadecimal and ASCII
format. The general syntax is:

          DUMP unambiguous filespec

Example:

Command             What it does

DUMP ABC.TEX        Displays the contents of the file ABC.TEX

ED
==

ED is the CP/M standard character file editor. To redirect or
rename the new version of the file specify the destination drive
or destination filespec.

Format:

     ED input-filespec {d:|output-filespec}

ED Command Summary

Command             Action

    nA              append n lines from original file to memory
                    buffer
    
    0A              append file until buffer is one half full
    
    #A              append file until buffer is full (or end of
                    file)
    
    B, -B           move CP to the beginning (B) or bottom (-B)
                    of buffer
    
    nC, -nC         move CP n characters forward (C) or back (-C)
                    through buffer
    
    nD, -nD         delete n characters before (-D) or from (D)
                    the CP
    
    E               save new file and return to CP/M
    
    Fstring{^Z}     find character string
    
    H               save new file, reedit, use new file as
                    original file
    
    I<cr>           enter insert mode
    
    Istring{^Z}     insert string at CP
    
    Jsearch_str^Zins_str^Zdel_to_str
                    juxtapose strings
    
    nK, -nK         delete (kill) n lines from the CP
    
    nL, -nL, 0L     move CP n lines
    
    nMcommands      execute commands n times
    
    n, -n           move CP n lines and display that line
    
    n:              move to line n
    
    :ncommand       execute command through line n
    
    Nstring{^Z}     extended find string
    
    O               return to original file
    
    nP, -nP         move CP n pages (23 lines) forward (n) or
                    backward (-n) and display 23 lines at console
    
    Q               abandon new file, return to CP/M
    
    R{^Z}           read X$$$$$$$.LIB file into buffer
    
    Rfilespec{^Z}   read filespec into buffer
    
    Sold_string^Znew_string   
                    substitute string
    
    nT, -nT, 0T     type n lines
    
    U, -U           upper-case translation
    
    V, -V           line numbering on/off
    
    0V              display free buffer space
    
    nW              write n lines to new file
    
    0W              write until buffer is half empty
    
    nX              write or append n lines to X$$$$$$$.LIB
    
    nXfilespec{^Z}       
                    write n lines to filespec; append if previous
                    xcommand applied to same file
    
    0x{^Z}          delete file X$$$$$$$.LIB
    
    0xfilespec{^Z}  delete filespec
    
    nZ              wait n seconds
 
Notes:    (a)  CP points to the current character being
               referenced in the edit buffer. 
          (b)  Use {^Z} to separate multiple commands on the same
               line.

Examples:

Command             What it does

ED TEST.DAT         edits the file TEST.DAT on the current drive

ED TEST.DAT B:      edits the file TEST.DAT on the current drive
                    and puts the modified file on drive B: with
                    the same name.

ED TEST.DAT TEST2.DAT    edits the file TEST.DAT on the current
                         drive and renames the modified file to
                         TEST2.DAT on the current drive.

ERASE
=====

The ERASE command removes one or more files from the directory of
a disk. Wildcard characters are accepted in the filespec.
Directory and data space are automatically reclaimed for later
use by another file. 
 
ERASE with confirm or if the files are password protected, is a
transient utility ERASE.COM

Syntax:

     ERASE {filespec} [CONFIRM]

Options:

[CONFIRM]      option informs the system to prompt for
               verification before erasing each file that matches
               the filespec.   CONFIRM  can  be abbreviated to C.
 
Examples:

Command             What it does
ERASE X.PAS         Removes the file X.PAS from the disk in drive
                    A.

ERASE *.PRN
     Confirm (Y/N)?Y
                    All files with the filetype PRN are removed
                    from the disk in drive A.

ERASE A:MY*.* [CONFIRM]
                    Each file on drive A with a filename that
                    begins with MY is displayed with a question
                    mark for confirmation. Type Y to erase the
                    file displayed, N to keep the file.

ERASE B:*.*
     Confirm (Y/N)?Y
                    All files on drive B are removed from the
                    disk.

GENCOM
======

The GENCOM command creates a special COM file with attached RSX
files. The GENCOM command can also restore a previously GENCOMed
file to the original COM file without the header and RSX's.
GENCOM can also attach header records to COM files.

Syntax:

GENCOM {COM-filespec} {RSX-filespec} ... {[LOADER | NULL |
                     SCB=(offset,value)]}

Options

LOADER         sets a flag to keep the program loader active.
    
NULL           indicates that only RSX files are specified.
               GENCOM creates a dummy COM file for the RSX files.
               The output COM filename is taken from the filename
               of the first RSX-filespec.
    
SCB=(offset,value)  sets the System Control Block from the
                    program by using the hex values specified by
                    (offset,value).
 
Examples:

Command             What it does

GENCOM MYPROG PROG1 PROG2

                    Generates a new COM file MYPROG.COM  with
                    attached RSX's PROG1 and PROG2.

GENCOM PROG1 PROG2 [NULL]

                    Creates a COM file PROG1.COM with RSX's PROG1
                    and PROG2.

GENCOM MYPROG       GENCOM takes MYPROG.COM,  strips off the
                    header and deletes all attached RSX's to
                    restore it to its original COM format.

GENCOM MYPROG PROG1 PROG2

                    GENCOM looks at the already-GENCOMed file
                    MYPROG.COM to see if PROG1.RSX and PROG2.RSX
                    are already attached RSX files in the module.
                    If either one is already attached, GENCOM
                    replaces it with the new RSX module.
                    Otherwise, GENCOM appends the specified RSX
                    files to the COM file.

GET
===

GET directs the system to take console input from a file for the
next system command or user program entered at the console.
Console input is taken from a file until the program terminates.
If the file is exhausted before program input is terminated, the
program looks for subsequent input from the console. If the
program terminates before exhausting all its input, the system
reverts back to the console for console input.

Syntax:

GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]}

To re-direct the system to the console for console input use the:

 GET CONSOLE INPUT FROM CONSOLE 

command as a command line in the input file.

Options

ECHO      specifies that input is echoed to the console.  This is
          the default option.
    
NO ECHO   specifies that file input is not echoed to the console.
          The program output and the system prompts are not
          affected by this option and are still echoed to the
          console.
    
SYSTEM    specifies that all system input is immediately taken
          from the disk file specified in the command line. GET
          takes system and program input from the file until the
          file is exhausted or until GET reads a GET console
          command from the file.  With the SYSTEM option, the
          system immediately goes to the specified file for
          console input. The system reverts to the console for
          input when it reaches the end of file.
 
Examples:

Command             What it does

GET FILE XINPUT
MYPROG              Tells the system to activate the GET utility.
                    Since SYSTEM is not specified, the system
                    reads the next input line from the console
                    and  executes MYPROG.   If MYPROG program
                    requires console input, it is taken from the
                    file XINPUT. When MYPROG terminates, the
                    system reverts back to the console for
                    console input.

GET FILE XIN2 [SYSTEM]

                    Immediately directs the system to get
                    subsequent console input from file XIN2
                    because it includes the SYSTEM option. The
                    system reverts back to the console for
                    console input when it reaches the end of file
                    in XIN2. Or XIN2 may redirect the system back
                    to the console if it contains a GET CONSOLE
                    command.

GET CONSOLE         Tells the system to get console input from
                    the console. This command may be used in a
                    file (previously specified in a GET FILE
                    command), which is already being read by the
                    system for console input. It is used to re-
                    direct the console input back to the console
                    before the end-of-file is reached.

HELP
====

HELP displays information about CP/M topics and commands.

Syntax:

   HELP {topic} {subtopic1 ... subtopic8} {[NOPAGE|LIST]}

   HELP        displays a list of topics and provides summarized
               information for CP/M commands.
  
   HELP topic  displays information about that topic.
   HELP topic subtopic   
               displays information about that subtopic.
 
One or two letters is enough to identify the topics. After HELP
displays information for your topic,  it displays the special
prompt HELP> on your screen, followed by a list of subtopics.

  -  Enter ? to display list of main topics.
  -  Enter a period and subtopic name to access subtopics.
  -  Enter a period to redisplay what you just read.
  -  Press the RETURN key to return to the CP/M 3 system prompt.
  -  [NOPAGE] option disables the 24 lines per page console
     display.
  -  Press any key to exit a display and return to the HELP>
     prompt.

Examples:

Command             What it does

HELP DATE           Displays help on the DATE command

HELP DIR OPTIONS    Displays help on the subtopic options of the
                    DIR command.

HELP>.OPTIONS
HELP>SET
HELP>SET PASSWORD
HELP>.PASSWORD
HELP>.
HELP><cr>           Enters the HELP system and displays help on
                    the listed topics.

The text for the HELP screens are stored in the file HELP.HLP in
the form of an indexed ASCII file. A poorly documented feature of
the HELP utility allows you to edit the text in the HELP.HLP and
even add your own HELP topics. To convert the file into an
editable ASCII file, use:

     HELP [EXTRACT]

This creates the file HELP.DAT. Note that because of the large
size of the HELP.HLP and HELP.DAT files, you will need a disk
with a capacity of at least 180 k bytes, which is just slightly
more than what is available with a C-128 Single Sided CP/M disk.
Therefore, you must use either the 1750 RAM expander, or a double
sided disk. 

When you have finished with your editing, you can re-create the
HELP.HLP file with:

     HELP [CREATE]

HEXCOM
======
     
The HEXCOM command generates a command file (filetype .COM) from
a .HEX input file. It names the output file with the same
filename as the input file but with filetype .COM. HEXCOM always
looks for a file with filetype .HEX.

Syntax:

    HEXCOM filename

Example        What it Does

HEXCOM B:PROGRAM

               Generates a command file PROGRAM.COM from the
               input hex file PROGRAM.HEX.

INITDIR
=======

The INITDIR Command initializes a disk directory to allow date
and time stamping of files on that disk. INITDIR can also recover
time/date directory space.  For a description of date and time
stamps, see the document "The Disk System".

Syntax:

    INITDIR {d:}

Example        What it Does

INITDIR B:

    INITDIR WILL ACTIVATE TIME-STAMPS FOR SPECIFIED DRIVE.
    Do you want to re-format the directory on B: (Y/N)?Y

               Sets up the disk in drive B: for date/time
               stamping.  

KEYFIG
======

The purpose of the KEYFIG program is to allow you to alter the
definition of almost ANY key on the keyboard. The only keys that
you CANNOT modify are: the SHIFT keys, the SHIFT LOCK key, the
CONTROL key, the 40/80 DISPLAY key and the COMMODORE key. At each
step, options are presented in menu form. You can scroll through
the options in the menus by using the up and down arrow keys at
the top of the keyboard; pressing the return key selects the
choice that is highlighted. At almost any point, you can exit the
program by typing 'CTRL c'.

Setting Up Your Work File

The first thing you will be asked to do is set up your work file.
You will be given a choice of 3 sources from which you can do
this:

DEFAULT DEFINITIONS      which basically represent a standard set
                         of key definitions.
    
CURRENT DEFINITIONS      which represent the most recently loaded
                         set of definitions.
     
BOOT DISK DEFINITIONS    which represent the set of definitions
                         stored on your boot disk,  normally
                         default definitions, unless you replace
                         them via this program.

What To Do With Your Work File 

Once your work file is set up, you will be given a choice of 3
things to do: 

EDIT KEYS           which allows you to modify key definitions. 
    
ASSIGN COLORS       which allows you to redefine the meaning
                    associated with a particular color. 
    
EXIT AND SAVE       This is provided here as a quick means of
                    copying one set of definitions to another. 
                    For example, loading the default definitions
                    into your work file and saving them as the
                    current definitions, provides a means of
                    restoring your current definitions after
                    running an application which may have used a
                    now undesired set of key definitions.

Key Values

Each key has 4 values associated with it:

normal value   which represents the unshifted value of the key 
               as labeled.

SHIFTED value  which represents the values of the keys, as
               labeled, obtained by typing the desired key and 
               the shift key simultaneously. 

CONTROL value  which represents the value of the key obtained by
               typing the desired key and the CONTROL key
               simultaneously.

CAPS LOCK value     
               which represents the value obtained while in CAPS
               LOCK mode. This mode is obtained by typing the
               COMMODORE key and stays in effect until you type
               it again.
                     
The values for each key are listed in the document "The Console".

Selecting a Key to Edit

To select a key for editing,  you must actually select the
specific (1 of 4) value of the key that you want to modify. To do
this, type the key so that the four values associated with it are
displayed.  Use the up and down arrow keys to scroll through the
four values; type the return key to select the value that is
highlighted.  This is the specific key value that will be
modified.  The next time you view this key the new value you
assigned will be displayed. You can modify as many keys as you
want. When you are done, select the fifth choice - "exit and save
work file".  (NOTE: To view the up arrow, down arrow or return
key, type the desired key and the control key simultaneously). 

Editing Keys

Once you have selected a specific key value to edit, you will be
given a choice of 5 ways of modifying the key:

ASSIGN a new character   which allows you to do a 'one-for-one'
                         replacement of the key.

ASSIGN a STRING          which allows you to assign/edit a string
                         (more than 1 character) to the key

ASSIGN a COLOR           which allows you to assign an 80 or a 40
                         column color

ASSIGN a special function     
                         which allows you to assign a function
                         from a list of currently available
                         special functions.

ASSIGN a HEX value       which allows you to replace the key
                         value with a single hex value.

Assigning/Editing Strings

Once you have chosen to assign a string, you will be given a list
of 32 available strings (some of which may already be defined.)
Scroll through and select the one you want to assign to this key. 
At this point, the one you choose will be displayed near the top
of the screen for editing. You can edit by typing keys and/or by
choosing one of the menu options presented - insert a color, 
insert a hex value, insert a special function or a second string
(warning - the remainder of the string will be deleted if you
insert a second string.) You can also use the left and right
arrow keys and the insert and delete keys.   When you are done,
select the menu choice "exit string edit and save assigned
string".

Assigning/Editing Color Values

Once you have chosen to assign a color, you will be given a
choice of 5 color types to assign: an 80 column foreground color,
an 80 column background color, a 40 column foreground color, a 40
column background color or a 40 column border color.  Scroll
through and select the one you want to assign. At this point, a
color map consisting of 16 boxes labeled 'a' through 'p' will be
displayed.  Type the letter from the box representing the color
that you want to assign. (NOTE that one letter (usually 'a') will
appear to be missing, because it blends with the background color
- assume ALL boxes are lettered sequentially!)

Assigning/Editing Special Functions

Once you have chosen to assign a special function you will be
given a list of 16 currently available special functions. Scroll
through the list and assign the function that you want this key
to perform.

Assigning/Editing Hexadecimal Values               

Once you have chosen to assign a hex value to a key, you will be
prompted for the value to assign.  Only characters from 0-9 and a-
f (upper or lower case) will be accepted.  As you type
characters, the current value is shifted left one nibble and the
new value is ORed into the lst nibble.  You can type as many
characters as you want, but the last 2 you type will be the value
assigned to the key.  Type return when you are finished. Note:
The value you type when the four key values are displayed will
not be displayed as hex, but as what the hex value represents.

Finishing Up-Saving Your Work File

Once you have loaded your workfile and completed any editing you
wanted to do, you will be given three choices as to what to do
with your work file:
 
SAVE AS CURRENT     which makes the definitions in your work file
                    effective immediately upon exiting this
                    program

SAVE ON CP/M DISK   which will cause the definitions in your work
                    file to be loaded the next time you boot from
                    the disk to which it was saved

DON'T SAVE          a means of exiting if you made a mistake or
                    changed your mind. 

LIB 
===

A library is a file that contains a collection of object modules.
Use the LIB utility to create libraries, and to append, replace
select or delete modules from an existing library.  Use LIB to
obtain information about the contents of library files.

LIB creates and maintains library files that contain object
modules in Microsoft REL file format. These modules are produced
by Digital Research's relocatable macro-assembler program, RMAC,
or any other language translator that produces modules in
Microsoft REL file format.

You can use LINK to link the object modules contained in a
library to other object files. LINK automatically selects from
the library only those modules needed by the program being
linked, and then forms an executable file with a filetype of COM.

 Syntax:

       LIB filespec{[I|M|P|D]}
       LIB filespec{[I|M|P]}=filespec{modifier}
                    {,filespec{modifier} ... }

 Options

     I    The INDEX option creates an indexed library file of
          type .IRL. LINK searches faster on indexed libraries
          than on non-indexed libraries.
  
     M    The MODULE option displays module names.
  
     P    The PUBLICS option displays module names and the public
          variables for the new library file.
  
     D    The DUMP option displays the contents of object modules
          in ASCII form.

Modifiers
Use modifiers in the command line to instruct LIB to delete,
replace, or select modules in a library file. Angle brackets
enclose the modules to be deleted or replaced. Parentheses
enclose the modules to be selected.

LIB Modifiers

     Delete         <module=>
    
    Replace    <module=filename.REL>  If module name and filename
               are the same this shorthand can be used:
                              <filename>
    
    Select          (modFIRST-modLAST,mod1,mod2,...,modN)

Examples

Command        What it Does

LIB TEST4[P]   Displays all modules and publics in TEST4.REL.

LIB TEST5[P]=FILE1,FILE2
               Creates TEST5.REL from FILE1.REL and FILE2.REL and
               displays all modules and publics in TEST5.REL.

LIB TEST=TEST1(MOD1,MOD4),TEST2(C1-C4,C6)
               Creates a library file TEST.REL from modules in
               two source files. TEST1.REL contributes MOD1 and
               MOD4. LIB extracts modules C1, C4, and all the
               modules located between them, as well as module C6
               from TEST2.REL.

LIB FILE2=FILE3<MODA=>
               Creates FILE2.REL from FILE3.REL, omitting MODA
               which is a module in FILE3.REL.

LIB FILE6=FILE5<MODA=FILEB.REL>
               Creates FILE6.REL from FILE5.REL, FILEB.REL
               replaces MODA.

LIB FILE6=FILE5<THISNAME>
               Module THISNAME is in FILE5.REL.  When LIB creates
               FILE6.REL from FILE5.REL the file THISNAME.REL
               replaces the similarly named module THISNAME.

LIB FILE1[I]=B:FILE2(PLOTS,FIND,SEARCH-DISPLAY)
               Creates FILE1.IRL on drive A from the selected
               modules PLOTS, FIND, and modules SEARCH through
               the module DISPLAY, in FILE2.REL on drive B.

LINK
====

LINK combines relocatable object modules such as those produced
by RMAC, FORTRAN and PL/I-80 into a .COM file ready for
execution. Relocatable files can contain external references and
publics. Relocatable files can reference modules in library
files.  LINK searches the library files and includes  the
referenced modules in the output file. 

 Syntax:

       LINK d:{filespec,{[options]}=}filespec{[options]}{,...}

Options

Use LINK option switches to control execution parameters.  Link
options follow the file specifications and are enclosed within
square brackets.  Multiple switches are separated by commas.

    A     Additional memory; reduces buffer space and writes
          temporary data to disk
    
    B     BIOS link in banked CP/M system.
                    1. Aligns data segment on page boundary.
                    2. Puts length of code segment in header.
                    3. Defaults to .SPR filetype.
    
    Dhhhh Data origin; sets memory origin for common and data
          area
    
    Gn    Go; set start address to label n
    
    Lhhhh Load; change default load address of module to hhhh. 
          Default 0100H
    
    Mhhhh Memory size; Define free memory requirements for MP/M
          modules.
    
    NL    No listing of symbol table at console
    
    NR    No symbol table file
    
    OC    Output .COM command file. Default
    
    OP    Output .PRL page relocatable file for execution under
          MP/M in relocatable segment
    
    OR    Output .RSP resident system process file for execution
          under MP/M
    
    OS    Output .SPR system page relocatable file for execution
          under MP/M
    
    Phhhh Program origin; changes default program origin address
          to hhhh. Default is 0100H.
    
    Q     Lists symbols with leading question mark
    
    S     Search preceding file as a library
    
    $Cd   Destination of console messages d can be X (console), Y
          (printer), or Z (zero output). Default is X.
    
    $Id   Source of intermediate files; d is disk drive A-P.
          Default is current drive.
    
    $Ld   Source of library files; d is disk drive A-P. Default
          is current drive.
    
    $Od   Destination of object file; d can be Z or disk drive
          A-P. Default is to same drive as first file in the LINK
          command.
    
    $Sd   Destination of symbol file; d can be Y or Z or disk
          drive A-P. Default is to same drive as first file in
          LINK command.

Examples  What it Does

LINK b:MYFILE[NR]

          LINK on drive A uses as input MYFILE.REL on drive B and
          produces the executable machine code file MYFILE.COM on
          drive B. The [NR] option specifies no symbol table
          file.

LINK m1,m2,m3
          LINK combines the separately compiled files m1, m2, and
          m3, resolves their external references, and produces
          the executable machine code file m1.COM.

LINK m=m1,m2,m3
          LINK combines the separately compiled files m1, m2, and
          m3 and produces the executable machine code file m.COM.

LINK MYFILE,FILE5[s]
          The [s] option tells LINK to search FILE5 as a library.
          LINK combines MYFILE.REL with the  referenced
          subroutines contained in FILE5.REL on the default drive
          A and produces MYFILE.COM on drive A.

MAC
===

MAC, the CP/M macro assembler, reads assembly language statements
from a file of type .ASM, assembles the statements, and produces
three output files with the input filename and filetypes of .HEX,
.PRN, and .SYM. Filename.HEX contains INTEL hexadecimal format
object code.  Filename.PRN contains an annotated source listing
that you can print or examine at the console. Filename.SYM
contains a sorted list of symbols defined in the program.
 Syntax:

   MAC filename {$options}

Options

Use options to direct the input and output of MAC. Use a letter
with the option to indicate the source and destination drives,
and console, printer, or zero output. Valid drive names are A
thru O. X, P and Z specify console, printer, and zero output,
respectively.

 Assembly Options That Direct Input/Output

   A      source drive for .ASM file (A-O)
  
   H      destination drive for .HEX file (A-O, Z)
  
   L      source drive for macrolibrary .LIB files called by the
          MACLIB statement.
  
   P      destination drive for .PRN file (A-O, X, P, Z)
  
   S      destination drive for .SYM file

  
  Assembly Options That Modify Contents Of Output File
  
  +L      lists input lines read from macrolibrary .LIB files
  -L      suppresses listing (default)
  
  +M      lists all macro lines as they are processed during
          assembly
  -M      suppresses all macro lines as they are read during
          assembly
  *M      lists only hex generated by macro expansions
  
  +Q      lists all LOCAL symbols in the symbol list
  -Q      suppresses all LOCAL symbols in the symbol list
          (default)
  
  +S      appends symbol file to print file
  -S      suppresses creation of symbol file
  
  +1      produces a pass 1 listing for macro debugging in .PRN
          file
  -1      suppress listing on pass 1 (default)

Examples  What it Does

MAC SAMPLE
          Assembles the file SAMPLE.ASM using defaults

MAC SAMPLE $PB AA HC SX
          Assembles the file SAMPLE.ASM on drive A:, putting .PRN
          file on drive B:, .HEX file on drive C:, and .SYM
          displayed on the console.

PATCH
=====

The PATCH command displays or installs patch number n to the CP/M
system or command files. The patch number n must be between 1 and
32 inclusive.

Syntax:

    PATCH filename{.typ} {n}

Example        What it Does

PATCH SHOW 2   Patches the SHOW.COM system file with patch number
               2.

PIP 
===

The file copy program PIP copies files, combines files, and
transfers files between disks, printers, consoles, or other
devices attached to your computer. The first filespec is the
target or destination. The second filespec is the source. Use two
or more source filespecs separated by commas to combine two or
more files into one file. [o] is any combination of the available
options. The [Gn] option in the destination filespec tells PIP to
copy your file to that user number.

Syntax:

   PIP d:{Gn} | target_filespec{[Gn]} = source_filespec{[o]},...
                | d:{[o]}

PIP with no command tail displays an * prompt and awaits your
series of commands, entered and processed one line at a time. The
source or destination can be any CP/M logical device.

PIP OPTIONS

     A    Archive.  Copy only files that have been changed since
                    the last copy.

     C    Confirm.  PIP prompts for confirmation before each file
                    copy.

     Dn             Delete any characters past column n.

     E              Echo transfer to console.

     F              Filter form-feeds from source data.

     Gn             Get from or go to user n.

     H              Test for valid Hex format.

     I    Ignore :  00 Hex data records and test for valid Hex
                    format.

     K              Kill display of filespecs on console.

     L              Translate upper case to lower case.

     N              Number output lines

     O              Object file transfer, ^Z ignored.

     Pn             Set page length to n. (default n=60)

     Qs^Z           Quit copying from source at string s.

     R              Read files that have been set to SYStem.

     Ss^Z           Start copying from the source at the string
                    s.

     Tn             Expand tabs to n spaces.

     U              Translate lower case to upper case.

     V              Verify that data has been written correctly.

     W              Write over Read Only files without console
                    query.

     Z              Zero the parity bit.

Examples

 COPY A FILE FROM ONE DISK TO ANOTHER

     A>PIP b:=a:draft.txt
     A>PIP b:draft.txt = a:

     B3>PIP myfile.dat=A:[G9]
     A9>PIP B:[G3]=myfile.dat

COPY A FILE AND RENAME IT

     A5>PIP newdraft.txt=oldraft.txt
     C8>PIP b:newdraft.txt=a:oldraft.txt

 COPY MULTIPLE FILES

     A>PIP b:=draft.*
     A>PIP b:=*.*
     B>PIP b:=c:.*.*
     C>PIP b:=*.txt[g5]
     C>PIP a:=*.com[wr]
     B>PIP a:[g3]=c:*.*

 COMBINE MULTIPLE FILES

     A>PIP b:new.dat=file1.dat,file2.dat

 COPY, RENAME AND PLACE IN USER 1

     A>pip newdraft.txt[g1]=oldraft.txt

 COPY, RENAME AND GET FROM USER 1

     A>PIP newdraft.txt=oldraft.txt[g1]

 COPY TO/FROM LOGICAL DEVICES

     A>PIP b:funfile.sue=con:
     A>PIP lst:=con:
     A>PIP lst:=b:draft.txt[t8]
     A>PIP prn:=b:draft.txt

 
All options except C,G,K,O,R,V and W force an ASCII file
transfer, character by character, terminated by a ^Z.

PUT
===
PUT puts console or printer output to a file for the next command
entered at the console, until the program terminates.  Then
console output reverts to the console. Printer output is directed
to a  file until the program terminates. Then printer output is
put back to the printer.

 Syntax:

    PUT CONSOLE {OUTPUT TO} FILE filespec {option} | CONSOLE
    PUT PRINTER {OUTPUT TO} FILE filespec {option} | PRINTER
    PUT CONSOLE {OUTPUT TO} CONSOLE
    PUT PRINTER {OUTPUT TO} PRINTER

PUT with the SYSTEM option directs all subsequent console/printer
output to the specified file. This option terminates when you
enter the PUT CONSOLE or  PUT  PRINTER command.

Options
         [ {ECHO | NO ECHO} {FILTER | NO FILTER} | {SYSTEM} ]

ECHO      specifies that output is echoed to the console. This is
          the default option when you direct console output to a
          file.
    
NO ECHO   specifies that file output is not echoed to the
          console. NO ECHO is the default for the PUT PRINTER
          command.
    
FILTER    specifies filtering of control characters, which means
          that control characters are translated to printable
          characters.  For example, an ESCape character is
          translated to ^[.
    
NO FILTER means that \PUT does not translate control characters.
          This is the default option.
    
SYSTEM    specifies that system output as well as program output
          is written to the file specified by filespec. Output is
          written to the file until a subsequent PUT CONSOLE
          command redirects console output back to the console.

Examples  What it does

PUT CONSOLE OUTPUT TO FILE XOUT [ECHO]
          Directs console output to file XOUT with the output
          echoed to the console.

PUT PRINTER OUTPUT TO FILE XOUT
 MYPROG
          Directs the printer output of program MYPROG to file
          XOUT. The output is not echoed to the printer.

PUT PRINTER OUTPUT TO FILE XOUT2 [ECHO,SYSTEM]
     Directs all printer output to file XOUT2 as well as to the
     printer (with ECHO option), and the PUT is in effect until
     you enter a PUT PRINTER OUTPUT TO PRINTER command.

PUT CONSOLE OUTPUT TO CONSOLE
     Directs console output back to the console.

PUT PRINTER OUTPUT TO PRINTER
     Directs printer output back to the printer.

RENAME
======

RENAME lets you change the name of a file in the directory of a
disk. To change several filenames in one command use the * or ?
wildcards in the file specifications. The RENAME command can be
abbreviated REN. REN with no filespec prompts you for input.
RENAME is an internal command, but RENAME with password protected
files requires the external utility RENAME.COM.  You cannot
rename files across drives or user areas.

 Syntax:

     RENAME {new_filespec=old_filespec}

Example   What it does

RENAME FILE2.TXT=FILE1.TXT
          Renames the file FILE1.TXT to FILE2.TXT on the current
          drive.

RMAC
====

RMAC, a relocatable macro assembler, assembles .ASM files of into
.REL files that you can link to create .COM files.

 Syntax:

     RMAC filespec {$Rd | $Sd | $Pd}

Options

RMAC options specify the destination of the output files. Replace
d with the destination drive letter for the output files.

Option                   d=output option
R    drive for REL file  (A-O, Z)
S    drive for SYM file  (A-O, X, P, Z)
P    drive for PRN file  (A-O, X, P, Z)

                         A-O specifies drive A-O.
                         X means output to the console.
                         P means output to the printer.
                         Z means zero output.

Example   What it does

RMAC TEST $PX SB RB
          Assembles the file TEST.ASM from the current drive,
          sends the listing file (TEST.PRN) to the console, puts
          the symbol file (TEST.SYM) on drive B and puts the
          relocatable object file (TEST.REL) on drive B.

SAVE
====

SAVE copies the contents of memory to a file. To use SAVE, first
issue the SAVE command, then run your program which reads a file
into memory. Your program exits to the SAVE utility which prompts
you for a filespec to which it copies the contents of memory, and
the beginning and ending address of the memory to be SAVEd.

 Syntax:

     SAVE

Example

SAVE

Activates the SAVE utility. Now enter the name of the program
which loads a file into memory.

     A>SID dump.com

Next, execute the program.

     #g0

When the program exits, SAVE intercepts the return to the system
and prompts the user for the filespec and the bounds of memory to
be SAVEd.

     SAVE Ver 3.0
     Enter file (type RETURN to exit):dump2.com

If file DUMP2.COM exists already, the system asks:

     Delete dump2.com? Y
Then the system asks for the bounds of memory to be saved:

     Beginning hex address: 100
     Ending hex address: 400

The contents of memory from 100H (Hexadecimal) to 400H is copied
to file DUMP2.COM.

SET
===

SET initiates password protection and time stamping of files. It
also sets the file and drive attributes Read-Write, Read-Only,
DIR and SYS. It lets you label a disk and password protect the
label. To enable time stamping of files, you must first run
INITDIR to format the disk directory.  For a discussion of
passwords, date stamping and disk labels, see the document "The
Disk System".

 Syntax:

       SET [options]
       SET d: [options]
       SET filespec [options]

Label

       SET {d:} [NAME=labelname.typ]
       SET [PASSWORD=password]
       SET [PASSWORD=<cr>

Examples  What it does

SET [NAME=DISK100]
          Labels the disk on the default drive as DISK100.

SET [PASSWORD=SECRET]
          Assigns SECRET to the disk label.

SET [PASSWORD=<cr>
          Nullifies the existing password.

Passwords

       SET [PROTECT=ON]
       SET [PROTECT=OFF]
       SET filespec [PASSWORD=password]
       SET filespec [PROTECT=READ]
       SET filespec [PROTECT=WRITE]
       SET filespec [PROTECT=DELETE]
       SET filespec [PROTECT=NONE]
       SET filespec [attribute-options]

Password Modes

 Mode          Protection

READ           The password is required for reading, copying
               writing, deleting or renaming the file.
    
WRITE          The password is required for writing, deleting or
               renaming the file. You do not need a password to
               read the file.
    
DELETE         The password is only required for deleting or
               renaming the file. You do not need a password to
               read or modify the file.
    
NONE           No password exists for the file.  If a password
               password exists, this modifier can be used to
               delete the password.

Attributes

      RO       sets the file attribute to Read-Only.
    
      RW       sets the file attribute to Read-Write.
    
     SYS       sets the file attribute to SYS.
    
     DIR       sets the file attribute to DIR.
    
ARCHIVE=OFF    means that the file has not been backed up
               (archived).
    
ARCHIVE=ON     means that the file has been backed up (archived). 
               The Archive attribute can be turned on by SET or
               by PIP when copying a group of files with the PIP
               [A] option. SHOW and DIR display the Archive
               option.
    
F1=ON|OFF      turns on or off the user-definable file attribute
               F1.
    
F2=ON|OFF      turns on or off the user-definable file attribute
               F2.
    
F3=ON|OFF      turns on or off the user-definable file attribute
               F3.
    
F4=ON|OFF      turns on or off the user-definable file attribute
               F4.

Examples       What it does

 SET [PROTECT=ON]
               Turns on password protection for all the files on
               the disk. You must turn on password protection
               before you can assign passwords to files.

 SET [PROTECT=OFF]
               Disables password protection for the files on your
               disk.

SET MYFILE.TEX [PASSWORD=MYFIL]
               MYFIL is the password assigned to file MYFILE.TEX.

SET *.TEX [PASSWORD=SECRET, PROTECT=WRITE]
               Assigns the password SECRET to all the TEX files
               on the current drive. Each TEX file is given a
               WRITE protect mode to prevent unauthorized
               editing.

SET MYFILE.TEX [RO SYS]
               Sets MYFILE.TEX to Read-Only and SYStem.

Default

SET [DEFAULT=dd]
               Instructs the system to use dd as a password if
               you do not enter a password for a password-
               protected file.

Time-Stamps

 Syntax:

       SET [CREATE=ON]
       SET [ACCESS=ON]
       SET [UPDATE=ON]

The above SET commands allow you to keep a record of the time and
date of file creation and update, or of the last access and
update of your files.

Options

      [CREATE=ON]   turns on CREATE time stamps on the disk in
                    the default or specified  drive. To record
                    the creation time of a file, the CREATE
                    option must be turned on before the file is
                    created.
    
     [ACCESS=ON]    turns on ACCESS time stamps on the disk in
                    the default or specified drive. ACCESS and
                    CREATE options are mutually exclusive; only
                    one can be in effect at a time. If you turn
                    on the ACCESS time stamp on a disk that
                    previously had CREATE time stamp, the  CREATE 
                    time stamp is automatically turned off.
    
     [UPDATE=ON]    turns on UPDATE time stamps on the disk in
                    the default or specified drive. UPDATE time
                    stamps record the time the file was last
                    modified.

Examples  What it does

       SET [ACCESS=ON]
          Turns on the access time stamp

       SET [CREATE=ON,UPDATE=ON]
          Turns on the create and update time stamps

Drives

 Syntax:

       SET {d:} [RO]
       SET {d:} [RW]

 Example       What it does

SET B: [RO]    Sets drive B to Read-Only.

SETDEF
======

SETDEF allows the user to display or define up to four drives for
the program search order, the drive for temporary files, and the
file type search order.  The SETDEF definitions affect only the 
loading of programs and/or execution of SUBMIT (SUB) files.
SETDEF turns on/off the system Display and Console Page modes.
When  on, the system displays the location and name of programs
loaded or SUBmit files executed, and stops after displaying one
full console screen of information.

 Syntax:

       SETDEF { d: {,d: {,d: {,d:}}}} {[ TEMPORARY = d: ] | 
               [ ORDER = (typ {,typ}) ]}
       SETDEF [DISPLAY | NO DISPLAY]
       SETDEF [PAGE | NOPAGE]

Examples  What it does

SETDEF    Displays current SETDEF parameters.

SETDEF [TEMPORARY=C:]
          Sets disk drive C as the drive to be used for temporary
          files.
SETDEF C:,*
          Tells the system to search for a program on drive C,
          then, if not found, search for it on the default drive.

SETDEF [ORDER=(SUB,COM)]
          Instructs the system to search for a SUB file to
          execute. If no SUB file is found, search for a COM
          file.

SETDEF [DISPLAY]

          Turns on the system display mode.  Henceforth, the
          system displays the name and location of programs
          loaded or submit files executed.

SETDEF [NO DISPLAY] 
          Turns off the system Display mode.

SHOW
====
The SHOW command displays the following disk drive information:

-   Access mode and the amount of free disk space
-   Disk label
-   Current user number and
-   Number of files for each user number on the disk
-   Number of free directory entries for the disk
-   Drive characteristics

 Syntax:

     SHOW {d:}{[SPACE |LABEL |USERS |DIR |DRIVE]}

Examples  What it does

SHOW [SPACE]
          Instructs the system to display access mode and amount
          of space left on logged-in drives.

SHOW B:   Show access mode for drive B and amount of space left
          on drive B.

SHOW B:[LABEL]
          Displays label information for drive B.

SHOW [USERS]
          Displays the current user number and all the users on
          drive A and the corresponding number of files assigned
          to them.

SHOW C:[DIR]
          Displays the number of free directory entries on drive
          C.

SHOW [DRIVE]
          Displays the drive characteristics of drive A.

SID
===
The SID symbolic instruction debugger allows you to  monitor and
test programs developed for the 8080 microprocessor. SID supports
real-time breakpoints, fully monitored execution, symbolic
disassembly, assembly, and memory display and fill functions. SID
can dynamically load SID utility programs to  provide traceback
and histogram facilities.

 Syntax:

     SID {pgm-filespec} {,sym-filespec}

Commands
Command                  Meaning

As        (Assemble)     Enter assembly language statements s is
                         the start address
    
Cs{b{,d}} (Call)         Call to memory location from SID s is
                         the called address b is the value of the
                         BC register pair d is the value of the
                         DE register pair
    
D{W}{s}{,f} (Display)    Display memory in hex and ASCII W is a
                         16-bit word format s is the start
                         address f is the finish address
    
Epgm-filespec (Load)     Load program and symbol table for
                         execution
 
E*sym-filespec (Load)    Load a symbol table file
    
Fs,f,d    (Fill)         Fill memory with constant value s is the
                         start address f is the finish address d
                         is an eight-bit data item
    
G{p}{,a{,b}} (Go)        Begin Execution p is a start address a
                         is a temporary breakpoint
    
H         (Hex)          Displays all symbols with addresses in
                         Hex

    H.a                  Displays hex, decimal, and ASCII values
                         of a where a is a symbolic expression

    Ha,b                 Computes hex sum and difference of a and
                         b where a and b are symbolic expressions
    
Icommand tail  (Input)   Input CCP command line
    
L{s}{,f}       (List)    List 8080 mnemonic instructions s is the
                         start address f is the finish address
    
Ms,h,d         (Move)    Move Memory Block s is the start address
                         h is the high address of the block d is
                         the destination start address
    
P{p{,c}}       (Pass)    Pass point set, reset, and display p is
                         a permanent breakpoint address c is
                         initial value of pass counter
    
Rfilespec{,d}  (Read)    Read Code/Symbols d is an offset to each
                         address
    
S{W}s          (Set)     Set Memory Values s is address where
                         value is sent, SW uses 16 bit words
    
T{W}{n{,c}}     (Trace)  Trace Program Execution n is the number
                         of program steps c is the utility entry
                         address. W instructs SID not to trace
                         subroutines
       
U{W}{n{,c}}  (Untrace)   Monitor Execution without Trace n is the
                         number of program steps c is the utility
                         entry address W instructs SID not to
                         trace subroutines
    
V           (Value)      Display the value of the next available
                         location in memory (NEXT), the next
                         location after the largest file read in
                         (MSZE), the current value of the Program
                         counter (PC), and the address of the end
                         of available memory (END)
    
Wfilespec,s,f (Write)    Write the contents of a contiguous block
                         of memory to filespec. s is start
                         address, f is finish address
    
X{f}{r}     (Examine)    Examine/alter CPU state. f is flag bit
                         C,Z,M,E or I. r is register A,B,D,H,S or
                         P.

Examples  What it does

 A>SID
          CP/M loads SID from drive A into memory. SID displays
          the # prompt when it is ready to accept commands.

SID B:SAMPLE.HEX
          CP/M loads SID and the program file SAMPLE.HEX into
          memory from drive B.

Utilities

SID utilities, HIST.UTL and TRACE.UTL are special programs that
operate with SID to provide additional debugging facilities. 

The HIST utility creates a histogram (bar graph) showing the
relative frequency of execution  of code within selected program
segments of the test program. The HIST utility allows you to
monitor those sections of code that execute most frequently.

The TRACE utility obtains a backtrace of the instructions that
led to a particular breakpoint address in a program under test. 
You can collect the addresses of up to 256 instructions between
pass points in U or T modes.

SUBMIT
======

The SUBMIT command lets you execute a group (batch) of commands
from a SUBmit file (a file with filetype of SUB).  This is
similar to an MS-DOS .BAT file.

 Syntax:

     SUBMIT {filespec} {argument} ... {argument}

Subfile

The SUB file can contain the following types of lines:

          Any valid CP/M 3 command
          Any valid CP/M 3 command with SUBMIT parameters ($0-$9)
          Any data input line
          Any program input line with parameters ($0 to $9)

The command line cannot exceed 135 characters.

The following lines illustrate the variety of lines which may be
entered in a SUB file:

       DIR
       DIR *.BAK
       MAC $1 $$$4
       PIP LST:=$1.PRN[T$2 $3 $5]
       DIR *.ASM
       PIP
       <B:=*.ASM
       <CON:=DUMP.ASM
       <
       DIR B:

Execute

 Syntax:

       SUBMIT
       SUBMIT filespec
       SUBMIT filespec argument ... argument

 Examples:

       A>SUBMIT
       A>SUBMIT SUBA
       A>SUBMIT AA ZZ SZ
       A>SUBMIT B:START DIR E:

PROFILE.SUB

Every time you power up or reset your computer, CP/M looks for a
special SUBmit file named PROFILE.SUB to execute. If it does not
exist, CP/M resumes normal operation. If the PROFILE.SUB file
exists, the system executes the commands in the file. This file
is convenient to use if you regularly execute a set of commands
before you do your regular session on the computer.

TYPE
====

The TYPE command displays the contents of an ASCII character file
on your screen. TYPE with options or for password protected files
is a transient utility requiring the program TYPE.COM.

 Syntax:

       TYPE {filespec [ PAGE | NOPAGE ]}

[PAGE]    Causes the console listing to be displayed in paged
          mode; i.e., stop automatically after listing n lines of
          text, where n normally defaults to 24 lines per page.
    
[NOPAGE]  Turns off Console Page Mode and continuously displays a
          typed file on the screen.

Example   What it does

TYPE B:THISFILE [PAGE]
          Displays the contents of the file THISFILE from drive B
          on your screen twenty four lines at a time.

XREF
====

XREF provides a cross-reference summary of variable usage in a
program. XREF requires the .PRN and .SYM files produced by MAC or
RMAC for input to the program. The SYM and PRN files must have
the same filename as the filename in the XREF command tail. XREF
outputs a file of type .XRF.

 Syntax:

       XREF {d:} filename {$P}

CPM4.TXT rev 1a 96-11-01
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    THIS DOCUMENT IS COPYRIGHT (C) 1988, 1996 BY HERNE DATA
    SYSTEMS LTD. THE MATERIAL CONTAINED HEREIN MAY BE FREELY
    USED FOR PERSONAL INFORMATION ONLY. IF YOU REPRODUCE IT,
    THIS COPYRIGHT NOTICE MUST NOT BE REMOVED. THIS MATERIAL
    MAY NOT BE EXPLOITED FOR COMMERCIAL PURPOSES.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Herne Data Systems Ltd., 
PO Box 250, Tiverton, ON N0G 2T0 CANADA.  
Voice/fax 519-366-2732, 
e-mail herne@herne.com
internet: http://www.herne.com

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

                               The Console
                               ===========

The Command Line
             
Keys For Processing CP/M Command Line

The key labeled CRSR with up and down arrows (bottom right on
keyboard) generates the value 17 (same as '<CONTROL>-w') and
causes the latest CP/M command line to be displayed on the
screen.  The key next to this (CRSR with right and left arrows)
allows you to move right and left (unshifted and shifted,
respectively) through this command string to edit.  This is
useful for correcting typing mistakes in lengthy command
sequences.

Selectively Displayed Disk Status Line

There is an optional disk status displayed at the bottom right
corner of the screen. The format of this status line is as
follows:

               O Dtt ss
where: O  =Operation, either R or W indicating a Read or Write 
       D  =the logical drive (A,B,C,D, etc)
      tt  =the track number currently being read or written
      ss  =the sector number currently being read or written

Normally, the track and sector number are separated by a space. 
If the disk is formatted MFM, and the track and sector are
separated by a '-', the second side of the disk is currently
being accessed.

You can toggle this status to be displayed or not by typing the
RUN/STOP key and the control key simultaneously.

Keyboard Definitions

The Commodore 128 Keyboard is defined for CP/M as follows:

Each key has 4 values associated with it. These are defined as
the unshifted, value, the shifted value, the control value and
the CAPS LOCK value.  The UNSHIFTED value is basically the key as
labeled, and is produced by typing the key; the SHIFTED value
represents the key, as labeled, when typed with one of the SHIFT
keys on either side of the space bar; the CONTROL value is the
value produced by typing the key and the CONTROL key
simultaneously; the CAPS LOCK value is the value produced when in
CAPS LOCK mode. (CAPS LOCK mode is entered by typing the
COMMODORE key and remains in effect until this key is typed
again.  This value is therefore typically documented as the CAPS
LOCK value.) 

SPECIAL KEYS

Numeric Keys

The alpha keys generate the standard lower case, upper case and
control values. The CAPS LOCK value is merely the upper case
value. The numeric keys (the row of keys above the alpha keys)
produce the appropriate number as the unshifted value and the
CAPS LOCK value, the symbol above the number on the key as the
shifted value and the color on the side of the key (the top one
of the two colors shown) as the control value.  These colors are
defined as 80 column foreground colors.  The control value
produced by the numbers on the numeric keypad are defined the
same as those on the numeric keys, except that they generate 80
column background colors.

Arrow Keys

The up arrow key generates the value 05 (same as 'CONTROLe') as
the unshifted, shifted and CAPS LOCK values;  it generates the
hexadecimal 12 (same as 'CONTROLr') as the control value.

The down arrow key generates the hexadecimal value 18 (same as
'CONTROLx') as the unshifted, shifted and CAPS LOCK values; it
generates the value 03 (same as 'CONTROLc') as the control value.

The left arrow key generates the hexadecimal value 14 (same as
'CONTROLs') as the unshifted, shifted and CAPS LOCK values; it
executes the 40 column screen left function as the control value.

The right arrow key generates the value 04 (same as 'CONTROLd')
as the unshifted, shifted and CAPS LOCK values; it executes the
40 column screen right functions as the control value.

Additional Key Characters

The key labeled as a British pound sign generates the character
'#' as the unshifted, shifted and CAPS LOCK values; the character
'`' is generated as the control value.
 
The up arrow key next to the RESTORE key generates the character
'^' as the shifted and control values; the pipe character '|' is
generated as the unshifted and CAPS LOCK values. 

The '=' key generates the character '=' as the unshifted, shifted
and CAPS LOCK values; the character '~' is generated as the
control value.
The '/' key generates the character '/' as the unshifted, shifted
and CAPS LOCK values; the character '\' is generated as the
control value.

The key labeled 'INST DEL' generates the hexadecimal value 7f
(ASCII rubout) as the unshifted, shifted and CAPS LOCK values;
the hexadecimal value 16 (same as 'CONTROL v' is generated as the
control value.

DEFAULT KEYBOARD VALUES

The default keyboard definition values are as follows (values in
hex, sorted by 'Unshifted' value):

Main Keyboard Keys:
Unshifted CapsLock  Shifted        Control        Key
00        00        00             00             (LEFT SHIFT) 
00        00        00             F5             CLEAR/ HOME 
00        00        00             00             (RIGHT SHIFT) 
00        00        00             F0             RUN STOP 
06        06        01             01             LEFT RIGHT 
09        15        30             00             (CONTROL)
                                                  SOUND1 SOUND2 
0D        0D        0D             0D             RETURN 
17        17        17             1A             UP DOWN 
20        20        20             00             SPACE 
21        20        00             00             (COMMODORE)
                                                  SOUND3 
23        23        23             60             œ ` 
2A        2A        2A             00             * 
2B        2B        2B             00             + 
2C        2C        3C             00             ,< 
2D        2D        2D             00             - 
2E        2E        3E             00             . > 
2F        2F        3F             5C             / ? \ 
30        30        30             00             0 
31        31        21             A0             1 
32        32        22             A1             2 " 
33        33        23             A2             3 # 
34        34        24             A3             4 $ 
35        35        25             A4             5 % 
36        36        26             A5             6 & 
37        37        27             A6             7 ' 
38        38        28             A7             8 ( 
39        39        29             00             9 ) 
3A        3A        5B             7B             : [ { 
3B        3B        5D             7D             ; ] } 
3D        3D        3D             7E             = ~ 
40        40        40             00             @ 
5E        5E        7C             7C             ^ | 
5F        5F        5F             7F              <- 
61        41        41             01             A 
62        42        42             02             B 
63        43        43             03             C 
64        44        44             04             D 
65        45        45             05             E 
66        46        46             06             F 
67        47        47             07             G 
68        48        48             08             H
69        49        49             09             I 
6A        4A        4A             0A             J 
6B        4B        4B             0B             K 
6C        4C        4C             0C             L 
6D        4D        4D             0D             M 
6E        4E        4E             0E             N 
6F        4F        4F             0F             O 
70        50        50             10             P 
71        51        51             11             Q 
72        52        52             12             R 
73        53        53             13             S 
74        54        54             14             T 
75        55        55             15             U 
76        56        56             16             V 
77        57        57             17             W 
78        58        58             18             X 
79        59        59             19             Y 
7A        5A        5A             1A             Z 
7F        7F        7F             16        INS DEL 
80        80        81             81             F1 F2 
82        82        83             83             F3 F4 
84        84        85             85             F5 F6 
86        86        87             87             F7 F8 
 
Extra Keypad Keys:
00        00        00             00             /ALT/ 
04        04        04             8E             /RIGHT/ 
05        05        05             12             /UP/ 
09        09        09             00             /TAB/ 
0A        0A        0A             0A             /LINE FEED/ 
0D        0D        0D             FF             /ENTR/ 
13        13        13             8D             /LEFT/ 
18        18        18             03             /DN/ 
1B        1B        1B             00             /ESC/ 
2B        2B        2B             F7             +(SELECT VT100)
2D        2D        2D             F6             -(SELECT ADM31)
2E        2E        2E             00             . 
30        30        30             00             0 
31        31        31             B0             1 
32        32        32             B1             2 
33        33        33             B2             3 
34        34        34             B3             4 
35        35        35             B4             5 
36        36        36             B5             6 
37        37        37             B6             7 
38        38        38             B7             8 
39        39        39             00             9 
9F        9F        9F             9F             /HELP/ 
F1        F1        F1             F2             /NO SCROLL/ 

FUNCTION KEY VALUES:

KEY CODE       STRING
80             'F1'
81             'F2'
82             'dir',cr
83             'dir '
84             'F5'
85             'F6'
86             'F7'
87             date
88             'F9'
89             'F10'
8A             'F11'
8B             f3, f3, f3, f3, f3, f3, f3, f3, f3, f3, f3, f3,
               f3, f3, f3, f3, f3, f3, f3, f3
8C             f4, f4, f4, f4, f4, f4, f4, f4, f4, f4, f4, f4,
               f4, f4, f4, f4, f4, f4, f4, f4
8D             f3, f3, f3, f3
8E             f4, f4, f4, f4
8F             'F16'
90             'F17'
91             'F18'
92             'F19'
93             'F20'
94             'F21'
95             'F22'
96             'F23'
97             'F24'
98             'F25'
99             'F26'
9A             'F27'
9B             'F28'
9C             'F29'
9D             'F30'
9E             'F31'
9F             'Help '

DEFAULT LOGICAL COLOR TABLE: 
00   11   22   33   44   55   66   77 
88   99   AA   BB   CC   DD   EE   FF 

Control/Right SHIFT Functions

There are 3 functions which are selected by typing the CONTROL
key, the RIGHT SHIFT key (the SHIFT key to the right of the space
bar) and the appropriate key for the desired function
simultaneously. The 3 keys to enable the desired functions are:
the key labeled ALT, which is used to select between remote and
local handling of certain key values, the right arrow key which
is used to initiate editing function keys, and the left arrow
key, which is used to initiate replacement of key values with a
hexadecimal value. The last 2 functions allow you to edit key
definitions directly, without using the KEYFIG program.  

 <Control Rt SHFT ALT> Mode Toggle
The key labeled ALT is used to toggle between handling certain
functions at the keyboard level or passing the appropriate key
code to a remote application for processing.  These functions
include all hexadecimal key values between 80 and ff. These are
defined as follows:

80-9f     identify function strings
a0-af     identify 80 column foreground colors
b0-bf     identify 80 column background colors
c0-cf     identify 40 column foreground colors
d0-df     identify 40 column background colors
e0-ef     identify 40 column border colors
f0-ff     identify special functions

The default mode is that these keycodes are handled locally.  In
this mode, the functions as defined above are executed.  If
remote handling of these codes is selected, the appropriate
keycode (80-ff) is passed along to a remote application which
processes it however it wishes.

String Edit <CTL RTSHFT Right Arrow>       

To edit a string type the CONTROL KEY,  the RIGHT SHIFT key and
the RIGHT ARROW key simultaneously,  then type the key to which
you want to assign the string. Note that the key you pick must
already have a string value (80-9F) assigned to it.

A window will pop up at the bottom of the screen, in which you
will edit. Type the string and type CONTROL, RIGHT SHIFT, RETURN
to exit. For editing, you can use CONTROL, RIGHT SHIFT, RIGHT
ARROW or LEFT ARROW to move right or left through the string and
CONTROL RIGHT SHIFT + or - to insert or delete a character
respectively.

Editing the Hexadecimal Value of a Key   

To assign a single hex value, type CONTROL, RIGHT SHIFT and LEFT
ARROW key simultaneously.  Type the key you want to modify. A
window will pop up at the bottom of the screen showing the
current hex value, per the current mode (unshifted, shifted, CAPS
LOCK or control). Enter the new hex value. NOTE that any illegal
key will abort the edit without modifying the key.

Keys Initiating Special Functions

The key labeled NO SCROLL executes a PAUSE function. To resume
execution, press NO SCROLL again (for AUG or DEC version only) or
RETURN (for MAY version only).  This has the same effect as
typing control-s for pausing to read screen dumps. The control
value of the NO SCROLL key toggles between two modes (on/off) of
automatically tracking the CP/M screen on a 40 column monitor.

The right and left arrows at the top of the keyboard initiate the
special functions screen right and screen left respectively (40
column screen tracking) as their unshifted, shifted and CAPS LOCK
values.

The key labeled ENTER generates a Carriage Return as the
unshifted, shifted and CAPS LOCK values.  The control value
initiates the special function boot, which reboots the system.

The key labeled RUN STOP is undefined as its unshifted, shifted
and CAPS LOCK values, and toggles the display/nondisplay of the
disk status line as its control value.

CP/M 3 Command Format:

     A>COMMAND {command tail} <cr>

A CP/M 3 command line is composed of a command, an optional
command tail, and a carriage return. The command is the name or
filename of a program to be executed. The optional command tail
can consist of a drive specification, one or more file
specifications, and some options or parameters.

COMMAND CONVENTIONS

The following special symbols define command syntax.

     {}   surrounds an optional item.
     |    separates alternative items in a command line.
     <cr>      indicates a carriage return.
     ^    indicates the Control Key.
     n    substitute a number for n.
     s    substitute a string (group) of characters for s.
     o    substitute an option or option list for o.
     []   type square brackets to enclose an option list.
     ()   type parentheses to enclose a range of options within
          an option list.
     RW   Read-Write attribute - opposite of RO
     RO   Read-Only attribute - opposite of RW
     SYS  System attribute - opposite of DIR
     DIR  Directory attribute - opposite of SYS
      ...      preceding element can be repeated as many times as
               desired.
     *    wildcard: replaces all or part of a filename and/or
          filetype.
     ?         wildcard: replaces any single character in the
               same position of a filename and/or filetype.

 Control Character       Function

 CTRL-A             moves cursor one character to the left. 

 CTRL-B             moves cursor from beginning to end of command
                    line and back without affecting command.
 
 CTRL-C             stops executing program when entered at the
                    system prompt or after CTRL-S.

 CTRL-E             forces a physical carriage return without
                    sending command. 

 CTRL-F             moves cursor one character to the right. 

 CTRL-G             deletes character at current cursor position
                    if in the middle of a line. 

 CTRL-H             delete character to the left of cursor.

 CTRL-I             same as the TAB key.

 CTRL-J             moves cursor to the left of the command line
                    and sends command to CP/M. Line feed, has
                    same effect as carriage return.

 CTRL-K             deletes character at cursor and all
                    characters to the right.

 CTRL-M             same as carriage return.

 CTRL-P             echoes console output to the list device.

 CTRL-Q             restarts screen scrolling after a CTRL-S.

 CTRL-R             retypes the characters to the left of the
                    cursor on a new line; updates the command
                    line buffer.

 CTRL-S             stops screen scrolling.

 CTRL-U             updates the command line buffer to contain
                    the characters to the left of the cursor;
                    deletes current line.

 CTRL-W             recalls previous command line if current line
                    is empty; otherwise moves cursor to end of
                    line. CTRL-J,-M,-R,-U and RETURN update the
                    command line buffer for recall with CTRL-W. 

 CTRL-X             deletes all characters to the left of the
                    cursor.

Console Utilities:

Redirection using GET

 Syntax:

GET {CONSOLE INPUT FROM} FILE filespec{[{ECHO|NO ECHO} | SYSTEM]}
GET {CONSOLE INPUT FROM} CONSOLE

GET directs the system to take console input from a file for the
next system command or user program entered at the console.
Console input is taken from a file until the program terminates.
If the file is exhausted before program input is terminated, the
program looks for subsequent input from the console. If the
program terminates before exhausting all its input, the system
reverts back to the console for console input.

With the SYSTEM option, the system immediately goes to the
specified file for console input. The system reverts to the
console for input when it reaches the end of file. Re-direct the
system to the console for console input with the:

 GET CONSOLE INPUT FROM CONSOLE 

command as a command line in the input file.

Options

 ECHO                 specifies that input is echoed to the
                      console.  This is the default option.

 NO ECHO         specifies that file input is not echoed to
                 the console. The program output and the
                 system prompts are not affected by this
                 option and are still echoed to the console.

 SYSTEM          specifies that all system input is
                 immediately taken from the disk file
                 specified in the command line. GET takes
                 system and program input from the file until
                 the file is exhausted or until GET reads a
                 GET console command from the file.

Examples

 A>GET FILE XINPUT
 A>MYPROG

Tells the system to activate the GET utility. Since SYSTEM is not
specified, the system reads the next input line from the console
and  executes MYPROG.   If MYPROG program requires console input,
it is taken from the file XINPUT. When MYPROG terminates, the
system reverts back to the console for console input.

 A>GET FILE XIN2 [SYSTEM]
Immediately directs the system to get subsequent console input
from file XIN2 because it includes the SYSTEM option. The system
reverts back to the console for console input when it reaches the
end of file in XIN2. Or XIN2 may redirect the system back to the
console if it contains a GET CONSOLE command.

 A>GET CONSOLE

Tells the system to get console input from the console. This
command may be used in a file (previously specified in a GET FILE
command), which is already being read by the system for console
input. It is used to re-direct the console input back to the
console before the end-of-file is reached.

Keyboard Redefinition with KEYFIG

The purpose of the KEYFIG program is to allow you to alter the
definition of almost ANY key on the keyboard. The only keys that
you CANNOT modify are: the SHIFT keys, the SHIFT LOCK key, the
CONTROL key, the 40/80 DISPLAY key and the COMMODORE key. At each
step, options are presented in menu form. You can scroll through
the options in the menus by using the up and down arrow keys at
the top of the keyboard; pressing the return key selects the
choice that is highlighted. 

At almost any point, you can exit the program by typing 'CTRL c'
(the CONTROL key and C simultaneously.)
                   
Selecting a Key to Edit

To select a key for editing,  you must actually select the
specific (1 of 4) value of the key that you want to modify. To do
this, type the key so that the four values associated with it are
displayed.  Use the up and down arrow keys to scroll through the
four values; type the return key to select the value that is
highlighted.  This is the specific key value that will be
modified.  The next time you view this key the new value you
assigned will be displayed. You can modify as many keys as you
want. When you are done, select the fifth choice - "exit and save
work file".  (NOTE: To view the up arrow, down arrow or return
key, type the desired key and the control key simultaneously). 

Setting Up Your Work File

The first thing you will be asked to do is set up your work file.
You will be given a choice of 3 sources from which you can do
this:

DEFAULT DEFINITIONS   which basically represent a standard set
                      of key definitions.
CURRENT DEFINITIONS   which represent the most recently loaded
                      set of definitions. 
DEFINITIONS ON BOOT DISK   which represent the set of definitions
                           stored on your boot disk, normally
                           default definitions, unless you replace
                           them via this program.

What To Do With Your Work File 

Once your work file is set up, you will be given a choice of 3
things to do: 

EDIT KEYS        which allows you to modify key definitions. 

ASSIGN COLORS         which allows you to redefine the meaning
                      associated with a particular color. 
EXIT AND SAVE         This is provided here as a quick means of
                      copying one set of definitions to another. 
                      For example, loading the default definitions
                      into your work file and saving them as the
                      current definitions, provides a means of
                      restoring your current definitions after
                      running an application which may have used a
                      now undesired set of key definitions.   
Editing Keys

Once you have selected a specific key value to edit, you will be
given a choice of 5 ways of modifying the key:

ASSIGN a new character     which allows you to do a 'one-for-one'
                           replacement of the key.
ASSIGN a STRING            which allows you to assign/edit a string
                           (more than 1 character) to the key
ASSIGN a COLOR             which allows you to assign an 80 or a 40
                           column color
ASSIGN special function    which allows you to assign a function
                           from a list of currently available
                           special functions.
ASSIGN a HEX value         which allows you to replace the key
                           value with a single hex value.

Assigning/Editing Color Values

Once you have chosen to assign a color, you will be given a
choice of 5 color types to assign: an 80 column foreground color,
an 80 column background color, a 40 column foreground color, a 40
column background color or a 40 column border color.  Scroll
through and select the one you want to assign. At this point, a
color map consisting of 16 boxes labeled 'a' through 'p' will be
displayed.  Type the letter from the box representing the color
that you want to assign.  (NOTE that one letter (usually 'a')
will appear to be missing, because it blends with the background
color - assume ALL boxes are lettered sequentially!)

Assigning/Editing Hexadecimal Values            

Once you have chosen to assign a hex value to a key, you will be
prompted for the value to assign.  Only characters from 0-9 and a-
f (upper or lower case) will be accepted.  As you type
characters, the current value is shifted left one nibble and the
new value is ORed into the lst nibble.  You can type as many
characters as you want, but the last 2 you type will be the value
assigned to the key.  Type return when you are finished. Note:
The value you type when the four key values are displayed will
not be displayed as hex, but as what the hex value represents.

WARNING:    This mode should only be used by those familiar with
            hexadecimal data.

Assigning/Editing Special Functions
Once you have chosen to assign a special function you will be
given a list of 16 currently available special functions. Scroll
through the list and assign the function that you want this key
to perform.

Assigning/Editing Strings

Once you have chosen to assign a string, you will be given a list
of 32 available strings (some of which may already be defined.)
Scroll through and select the one you want to assign to this key. 
At this point, the one you choose will be displayed near the top
of the screen for editing. You can edit by typing keys and/or by
choosing one of the menu options presented - insert a color,
insert a hex value, insert a special function or a second string
(warning - the remainder of the string will be deleted if you
insert a second string.) You can also use the left and right
arrow keys and the insert and delete keys.   When you are done,
select the menu choice "exit string edit and save assigned
string".

Finishing Up-Saving Your Work File

Once you have loaded your workfile and completed any editing you
wanted to do, you will be given three choices as to what to do
with your work file:
 
SAVE AS CURRENT       which makes the definitions in your work file
                      effective immediately upon exiting this
                      program
SAVE ON CP/M DISK     which will cause the definitions in your
                      work file to be loaded the next time you
                      boot from the disk to which it was saved
DON'T SAVE       a means of exiting if you made a mistake
                 or changed your mind. 

Redirect Console Output with PUT

 Syntax:

    PUT CONSOLE {OUTPUT TO} FILE filespec {option} | CONSOLE
    PUT PRINTER {OUTPUT TO} FILE filespec {option} | PRINTER
    PUT CONSOLE {OUTPUT TO} CONSOLE
    PUT PRINTER {OUTPUT TO} PRINTER

PUT puts console or printer output to a file for the next command
entered at the console, until the program terminates. Then
console output reverts to the console. Printer output is directed 
to a file until the program terminates. Then printer output is
put back to the printer.

PUT with the SYSTEM option directs all subsequent console/printer
output to the specified file. This option terminates when you
enter the PUT CONSOLE or  PUT PRINTER command.

 Options

         [ {ECHO | NO ECHO} {FILTER | NO FILTER} | {SYSTEM} ]

 ECHO            specifies that output is echoed to the
                 console. This is the default option when you
                 direct console output to a file.

 NO ECHO         specifies that file output is not echoed to
                 the console. NO ECHO is the default for the
                 PUT PRINTER command.

 FILTER          specifies filtering of control characters,
                 which means that control characters are
                 translated to printable characters.  For
                 example, an  ESCape character is translated
                 to ^[.

 NO FILTER            means  that  PUT does not translate control
                      characters. This is the default option.

 SYSTEM          specifies that system output as well as
                 program output is written to  the  file
                 specified by filespec. Output is written to
                 the file until a subsequent  PUT CONSOLE
                 command redirects console output back to the
                 console.

 Examples

 A>PUT CONSOLE OUTPUT TO FILE XOUT [ECHO]

Directs console output to file XOUT with the output echoed to the
console.

 A>PUT PRINTER OUTPUT TO FILE XOUT
 A>MYPROG

Directs the printer output of program MYPROG to file XOUT. The
output is not echoed to the printer.

 A>PUT PRINTER OUTPUT TO FILE XOUT2 [ECHO,SYSTEM]

Directs all printer output to file XOUT2 as well as to the
printer (with ECHO option), and the PUT is in effect until you
enter a PUT PRINTER OUTPUT TO PRINTER command.

 A>PUT CONSOLE OUTPUT TO CONSOLE

Directs console output back to the console.

 A>PUT PRINTER OUTPUT TO PRINTER

Directs printer output back to the printer.

Displaying a File with TYPE

 Syntax:

       TYPE {filespec {[ PAGE | NOPAGE ]}}

The TYPE command  displays  the  contents  of  an   ASCII
character file on your screen.

 [PAGE]          Causes the console listing to be displayed in
                 paged mode;  i.e., stop automatically after
                 listing n lines of text, where n normally
                 defaults to 24 lines per page.

 [NOPAGE]        Turns off Console Page Mode and continuously
                 displays a typed file on the screen.

TERMINAL EMULATION PROTOCOLS

ADM31 Mode

ADM31 mode is the default terminal mode for all versions of C-128
CP/M. In fact, it is the only mode available for the AUG and DEC
versions. (The MAY version also supports VT-100, if you re-
assemble the system files from scratch with the VT-100 option
enabled). The control codes for ADM31 mode and its various sub
modes are outlined below. The ^ means hold down <control> key.
Escape (ESC) sequences are activated by printing the character
sequence to the console.

ADM3A

Code                  Action
ESC = row col         set cursor position
ESC ESC ESC color     set color      (added for C128 CP/M)
^H                    cursor left
^L                    cursor right
^J                    cursor down
^K                    cursor up
^Z                    home and clear screen
^M                    carriage return
^G                    bell

ADM31

ESC = R C             set cursor position      
                 ® = row + $20, C = column + $20, Home = 0,0)
ESC ESC ESC color     set color           (added for C128 CP/M)
ESC T            clear to end of line
ESC t            clear to end of line
ESC Y            clear to end of screen
ESC y            clear to end of screen
ESC :            home & clear screen
ESC *            home & clear screen
ESC )            Half intensity on
ESC (            Half intensity off
ESC G 4               Reverse video on
ESC G 2               Blinking on
ESC G 1               select 80 col alternate character set
ESC G 0               Rev. video and blinking off, restore normal
                      80 col char set
ESC E            Insert line
ESC Q            Insert Character
ESC R            Delete Line
ESC W            Delete Character
^H                    cursor left
^L                    cursor right
^J                    cursor down
^K                    cursor up
^Z                    home and clear screen
^M                    carriage return
^G                    bell

KAPRO II Terminal control sequences

^H                    cursor left (bs)
^L                    cursor right
^J                    cursor down
^K                    cursor up
^^                    home cursor
^Z                    home cursor & clear screen
^M                    carriage return

ESC = R C             set cursor position 
                 ® and C = row + $20 and column + $20)
ESC E            Line Insert
ESC R            Line Delete
^X                    Clear to End of Line
^W                    Clear to End of Screen

ESC B <num>      turn attribute on
ESC C <num>      turn attribute off

                 where <num> is defined as:
                 0=   reverse video
                 1=   <half intensity>
                 2=   <blink>
                 3=   <underline>

VT 100 

^G                    bell
^H                    back space. stop at left margin
^I                    TAB
^J                    do line feed scroll at bottom
^K                    same as line feed
^L                    same as line feed
^M                    do CR
ESC                   start control seq
  ESC =               Keypad mode
  ESC >               Keypad mode
  ESC 7               Save current cursor post and char set
  ESC 8               Restore cursor position and char set
  ESC D               move cursor down one line
  ESC E               move cursor to start of next line
  ESC H               set horizontal tab
  ESC M               move cursor up one line
  ESC Z               same as ESC [ Pn c
  ESC c               reset
  ESC # 3             Double height line Top
  ESC # 4             Double height line Bottom
  ESC # 5             set single width line
  ESC # 6             Double width line
  ESC # 8             files screen with E's
  ESC [ Pn A          cursor up
  ESC [ Pn B          cursor down
  ESC [ Pn C          cursor right
  ESC [ Pn D          cursor left
  ESC [ Pn ; Pn H     cursor positioning
  ESC [ Ps J          erase display
  ESC [ Ps K          erase line
  ESC [ Pn c          device attributes request
  ESC [ Pn ; Pn f     cursor positioning
  ESC [ Ps g          clear tab stop(s)
  ESC [ Ps;..;Ps h    set mode
  ESC [ Ps;..;Ps l    reset attributes
  ESC [ Ps;..;Ps m    set attributes
  ESC [ Ps n          Device status report
  ESC [ Ps q          set LED's
  ESC [ Pn ; Pn r     Set Top and Bottom Margins
  ESC [ 2 ; Ps y      invoke confidence test
  ESC [ x             Report / Req parameters
  ESC ( A             select char set
  ESC ( B             select char set
  ESC ( 0             select char set
  ESC ( 1             select char set
  ESC ( 2             select char set
  ESC ) A             select char set
  ESC ) B             select char set
  ESC ) 0             select char set
  ESC ) 1             select char set
  ESC ) 2             select char set

CPM5.TXT rev 2a 96-11-01
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      THIS DOCUMENT IS COPYRIGHT (C) 1988, 1996 BY HERNE DATA
      SYSTEMS LTD.  THE MATERIAL CONTAINED HEREIN MAY BE FREELY
      USED FOR PERSONAL INFORMATION ONLY.  IF YOU REPRODUCE IT,
      THIS COPYRIGHT NOTICE MUST NOT BE REMOVED.  THIS MATERIAL
      MAY NOT BE EXPLOITED FOR COMMERCIAL PURPOSES.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Herne Data Systems Ltd., 
PO Box 250, Tiverton, ON N0G 2T0 CANADA.  
Voice/fax 519-366-2732, 
e-mail herne@herne.com
internet: http://www.herne.com

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

The C-128 CP/M Disk System
==========================

In order to understand how CP/M disk operations work, a brief
discussion of the CP/M disk organization would be useful.  Most
of the following discussion applies to all CP/M based systems,
not just the C-128.  One of the nicer points about CP/M is that
once you get beyond the BIOS, which deals with hardware specific
interfaces, the remainder of the system is virtually hardware
independent.  That is what makes properly designed CP/M programs
almost universally  portable.

Disk Organization

The CP/M disk is generally divided up into two main areas: the
"system tracks" and the "data area".   The system tracks, which
vary in size depending on the computer, are used to contain some
of the boot code required for initially starting up CP/M.  This
area is not normally used by CP/M once the system has booted, but
may be hold flags or other indicators which tell the BDOS which
of several kinds of disks it may be dealing with. 

The data area is subdivided into the "directory" and the "user
area".   The user area is where the program and data files are
kept. 

The Directory

The name of the files and their location on the disk is recorded
in the "directory".  This is a special area set aside on the disk
which is never used for file storage.    The directory contains
the maps by which the BDOS can find the specified files amongst
the large amounts of (at least temporarily) irrelevant data that
abounds in most sectors of the disk.  The importance of the
directory cannot be overstated.  Without it (for example if it
were to become corrupted or overwritten accidentally), data from
individual files may be lost forever.  Of course, you could try
to reconstruct the files by searching through the disk for pieces
of each file (they may or may not occupy adjacent areas on the
disk), but this is a very tedious task.  Believe me, I know from
experience!!

Although the exact location on the disk varies according to the
applicable CP/M disk format, the directory always takes the same
shape in the form of a series of 32 byte entries which contain
the following data:

For a User File:

Byte        Meaning
 0          0 - F             User Area;   or
            E5                Scratched or unused entry

1-8         file name         in ASCII capitals, left justified,
                              padded with ASCII spaces ($20's).  The
                              high bit of these positions is used to
                              record file special attributes according
                              to:

      Bytes 1 to 4            Bit 7=1 for user defined attributes 1 to
                              4
      Bytes 5 to 8            Bit 7=1 for system interface attributes
                              (used by BDOS)

9-11        file type         in ASCII capitals, left justified,
                              padded with ASCII spaces ($20's).  The
                              high bit (bit 7) of these positions is
                              used to record the file's "attributes"
                              according to the following usage:

      Byte 9                  Bit 7=1 for READ/ONLY file
      Byte 10                 Bit 7=1 for SYSTEM FILE
      Byte 11                 Bit 7=1 for ARCHIVE

12                            directory extent
15                            number of 128 byte records in this
                              extent (maximum hex $80)
16-31                         file allocation table.  If there are
                              less than 257 allocation units on the
                              disk, then the numbers are treated as 8
                              bit; while if there are greater than 256
                              AU's, the numbers are 16 bit in lo/hi
                              byte format. (numbers of logical AUs
                              used by file, unused locations set to 0)

For a password entry:

Byte        Meaning

0           $10 + user number

1-11        Filename and extension

12          Protection mode:
            Bit         Meaning when set
            7           READ protection
            6           WRITE protection
            5           DELETE protection

13          File password XOR mask encryption key.  XOR mask value
            is calculated from sum of (ASCII code of un-encrypted
            password character - 32).

16-23       8 byte XOR encrypted password, right justified, padded
            with leading encrypted spaces in unused locations.

For a directory label:

Byte        Meaning
0           $20   Flag meaning entry is a disk volume label

1-11        directory label in ASCII capitals, left justified,
            padded with ASCII spaces.

12          label data byte:
            Bit         Meaning when set
            7           files require passwords
            6           perform:    access time stamping
            5                       update      "     "
            4                       create      "     "
            0           label exists

13          Directory password XOR mask encryption key (same as for
            file passwords)

16-23       8 byte XOR encrypted password, right justified, padded
            with leading encrypted spaces in unused locations.

24-27       Creation time stamp (same format as time stamps used
            below)

28-31       Update time stamp.

For a Date/Time stamp:

Byte        Meaning
0           $21   flag for date/time stamp
1-10        Stamps for entry #1
11-20       Stamps for entry #2
21-30       Stamps for entry #3

Stamp sets have following structure:
Offset      Meaning
0-3         Create or Access stamp
4-7         Update stamp
8           Password mode
9           (reserved)

For each individual stamp:
Offset      Meaning
0 - 1       Date in days since 1 JAN 78, from $58-59 of SCB
2           Hour in BCD, from $5A of SCB
3           Minute in BCD, from $5B of SCB

CP/M filenames consist of two parts: a 1 to 8 character primary
name and an optional 0 to 3 character secondary name, usually
called a file type.  The file type generally is a standard
combination of three characters, such as BAS for a BASIC program
source code,  TXT or DOC for a text file, etc.  The conventions
for naming the extension are not cast in stone but some standards
are normally followed such as : COM  is used only for an
executable file; SUB  is used for a SUBMIT batch file;  SYS  is
used for the CP/M system file; and most CP/M assemblers produce
files with the extension HEX or OBJ.   In directory listings and
documentation, the two parts of the filename are usually
separated by a period (.) in the form of: "FILENAME.EXT" .  Note,
however, that the period is not included in the actual directory
entry on the disk.  If either the primary file name or the file
type contains less than the maximum number of characters, the
extra locations in the directory entry are padded with ASCII
space characters (hex $20 or CHR$(32)).  For example, the bytes
representing the name "FILE.1" would appear in a directory entry
as (decimal values):

  70  73  76  69  32  32  32  32  49  32  32
  F   I   L   E   (4 spaces)      1  (2 spaces)

Note that the characters in a filename are converted to uppercase
when they are parsed by the CCP.  However, if you do direct file
access (i.e. your program uses an external data file), you can
use lowercase in the filenames.  You can even use non-printing
control codes or other unusual characters in the name to give a
small degree of protection to your data.  Such files cannot be
accessed from the built in CP/M commands, such as TYPE, and are
difficult to copy with standard copiers, such as PIP, which go
through the filename parsing routine to convert to uppercase
before attempting to open the file.  If lowercase is present, no
filename match will be found.  Some programs, such as older
versions of MBASIC, allow you to distinguish between upper and
lower case in filenames.   For example, opening the file "file.1"
is not the same as "FILE.1".  "FILE.1" can be viewed with the
TYPE command and copied using, for example, PIP B:=A:FILE.1,
while "file.1" cannot be accessed by either method.

In addition, if you set the system flag in the name, it will not
even appear in a normal directory listing.

ALLOCATION UNITS

Disk space for files is doled out by the operating system in
lumps called "blocks" or "allocation units" (AU) of a fixed size,
typically 1024 bytes (1k) for single sided disks, 2048 bytes (2k)
for double sided disks, or sometimes 4096 bytes (4k) for large
capacity 3-1/2 inch or 8 inch disks.   Even if a file contains
only 1 byte, an entire allocation unit will be required.  Unused
space in an allocation unit cannot be used by other files, but
can be used by the file to which it is assigned if more space is
required for it.  (To complicate matters, the allocation unit
size does not depend on the physical disk sector size, but
fortunately none of this is of concern to the casual user).  

The directory always occupies at least AU 0, usually AU 1 as
well, and possibly more depending on the amount of space that has
been reserved for the directory.  A 1k AU can hold 32 entries, a
2k AU 64 entries, and a 4k AU 128.  Although it is by no means
'cast in stone', two allocation units are normally reserved for
the directory as a general rule.  This gives 64 entries for a
normal single sided disk and 128 entries for a double sided.  The
data area starts immediately after the directory area with the
next AU number, normally AU  2.

Each allocation unit is further divided into 128 byte chunks
called "records".  The record is the smallest directly
addressable part of a file.  As a file grows (such as by editing
a textfile), records are added as required.  If all space
currently allocated to a file is taken up, another allocation
unit is allocated.  (8 records can fit into a 1k byte AU,  16 in
a 2k AU or 32 in a 4k AU). 

A single CP/M directory entry has space for up to sixteen 8 bit
allocation units or eight 16 bit AU's.  If more are required to
hold larger files, extra directory entries or "extents"are
created for the file, each taking up an additional 32 bytes of
space in the directory area.  The directory entry keeps track of
the current record count in the extent so that space can be added
or deleted as required. 

Each allocation unit is composed of one or more physical disk
sectors.  The translation between logical allocation units and
physical sectors is handled by the CP/M BDOS system using a sort
of "translation table" called the DISK PARAMETER TABLE or DPT.
This contains the data required to convert logical records and
allocation units into physical locations on the disk and is
completely transparent to user programs which see everything in
terms of standard allocation units and records.  The different
physical disk formats obviously require different values for the
translation parameters.  Once these values are set for a given
disk format, the user need not be concerned what the physical
disk format is because all disk operations will be adjusted
automatically.

The Disk Parameter Table

One of the nicest features of C-128 CP/M mode is its ability to
read and write many "foreign" disk formats when used with a 1571
or 1581 disk drive.  This ability is built right into the
operating system, so no special user programming is required to
access this feature.  In addition, with a bit of knowledge of
disk formats, you can easily add support for virtually any CP/M
disk format. You can even create custom formats of your own to
keep your data away from prying eyes.  The secret lies in knowing
how the CP/M operating system recognizes different formats.

************************************************************
NOTE:
     The read/write heads on the 1581 3-1/2 inch drive are flipped
     compared to other computers.  This means that what the 1581
     thinks is side 0, the other computer takes as side 1, and vice
     versa.  This makes reading 1581 disks very difficult on
     machines not equipped with a WD177x floppy disk controller
     chip (such as the IBM-PC).  It also makes it difficult for a
     1581 drive to read single sided disks produced on other
     hardware.
************************************************************

As mentioned above, information on the disk formats is stored in
an area of the CP/M BIOS  known as the "DISK PARAMETER TABLE" or
DPT.  The absolute location of the DPT depends on which version
of the CP/M operating system is being used.  Four official
versions are currently in general use on the C-128,
differentiated by the date displayed on the CP/M boot up screen.
For the "1 Aug 85" version, the DPT is located from $d876 to
$da75 in BANK 0 RAM.  For the "6 Dec 85", and "8 Dec 85",
versions, it is located at $d6bd to $d8bc; while for the "28 May
87" version, it is at $d860 to $da5f.  For the May 87 version
with VT-100 emulation enabled, the DPT is at $d891 to $da90.  (In
all cases, the DPT can be located by the vector at $fd46, which
points to the start of the table.) 

Table 5-1 is a hex dump of the unmodified DPT (from memory).
Normally, it is difficult to examine this from  CP/M mode because
it resides in BANK 0, while most programs which allow you to
examine memory in CP/M mode work in BANK 1.  (Recall that in
CP/M, BANK 0 is used for the operating system while BANK 1 is
generally the user work space or "TRANSIENT PROGRAM AREA" (TPA)).
As you can see, each entry is 32 bytes long and only 9 of the 16
available spaces are actually used.  The 7 unused spots at the
end of the table can be identified by the word "None" in the disk
name field.  These spots (or any of the other spots, if you do
not wish to keep the disk format that it represents) can be
filled with custom values.  

Each of the bytes in a disk parameter table entry has a specific
meaning.  These are outlined below.  Many of the parameters are
repeated in different forms in a number of spots in each DPT
entry.  This is for convenience sake as different parts of the
CP/M operating system use the information indifferent ways.   For
clarity, I will number the bytes in each entry from 0 to 31.
Bits are numbered 7 6 5 4 3 2 1 0, with 7 being the high bit
(MSB) and 0 being the low bit (LSB).

Byte 0      is the root to the "problem" of recognizing a foreign
            disk format.  It can be called a "media descriptor
            byte" because it is used to identify the physical
            format of the disk.  It is this byte which gets
            examined when a disk is first read.  If two or more
            entries in the DPT have identical values here, the disk
            format selection box will appear on the bottom of the
            screen asking you to choose the correct format. 
            Although it is perhaps the most important, this byte is
            also very poorly documented.   Each of the bits in the
            byte serves a specific function:
   
      Bit 7       is a flag which indicates whether or not to skip
                  track 0 of the disk  during a query.   If it is
                  set to 0 (the normal value), it means that track 0
                  of the disk is the same as the rest of the disk.
                  If it is set to 1, track 0 has a different format
                  from the rest of the disk.  This may seem strange
                  at first, but many MFM disks (such as Epson QX-10)
                  are formatted differently, typically in single
                  density, on track 0 than on the other tracks to
                  maintain compatibility with older versions  of
                  their particular disk systems.

      Bit 6 & 5   indicate the physical sector size of the disk
                  according to:

                  6  5        Sector size

                  0 0         = 128 bytes
                  0 1         = 256
                  1 0         = 512
                  1 1         = 1024

      Bit 4 - 1   give an indication of the number of sectors per
                  track.  It is actually the binary representation
                  of:

                  (#sectors per track) - 4  

                  Some typical values are:      

                  4  3  2  1        sectors per track

                  0  0  0  1        5     =     (1)+4
                  0  1  0  0        8     =     (4)+4
                  0  1  0  1        9     =     (4+1)+4
                  0  1  1  0        10    =     (4+2)+4
                  1  1  0  0        16    =     (8+4)+4
                  1  1  1  0        18    =     (8+4+2)+4

      Bit 0       gives the minimum sector number on side 0. If the
                  value is 0, then sectors are numbered starting at
                  0. If bit 0 is set to 1, the sectors start at 1.
                  Note that this scheme precludes the C-128 CP/M
                  mode from reading some oddball types of disks
                  which start number sectors at 128 or some other
                  number which is greater than 1.

Byte 1      is called the Disk Type Byte.  It gives additional data
            on the logical structure of a disk.  The bits have the
            following meaning:

      Bit 7       describes the disk type:  1 = MFM or 0 = GCR.
                  This is always set to 1 for foreign (I.e. non-
                  Commodore CP/M) disk types.

      Bit 6       gives insight into how the sectors on side 2 of a
                  double sided disk are numbered:

            0 = both sides numbered same
            1 = side 2 sector numbers continue from side 1

                  For single sided disks, the bit should be set to
                  0.  IBM-8 is an example of bit value set to 0.
                  The sectors on both sides are numbered from 1 to
                  8.  Kaypro IV is an example of the second side
                  continuing from first.  The sectors  on the first
                  side are numbered from 0 to 9 while the sectors on
                  the second side are numbered from 10 to 19.  This
                  numbering scheme is sometimes referred to as a
                  "long" or "extended" track

      Bit 5 & 4   give the sector size, as outlined above for bits 6
                  and 5 of byte 0.

      Bit 3 - 1   determine the order in which a double sided disk
                  is filled.  For a single sided disk, the bits
                  should all be set to 0.  For double sided disks,
                  the bits have the following significance:

                  3  2  1    
                  0  0  0     fill track by track, first side 0 then
                              side 1 of same track then next track.
                              This is sometimes called a 'cylinder'

                  0  0  1     fill track by track, even track #'s on
                              side 0, odd on side 1.  This is a
                              variation of the cylinder scheme and is
                              usually interchangeable with it when you
                              take into account the number of records
                              per logical track.

                  0  1  0     fill all side 0 then side 1.  This is
                              sometimes called an 'extended surface'.
                              For MFM disks of this type, C-128 CP/M
                              assumes that each side of the disk has
                              40 tracks.  This may not be true in all
                              cases as some older types use only 35
                              tracks per side.

      Bit 0       is a repeat of byte 0, bit 0 as described above.

Bytes 2 and 3     are not normally used by many CP/M disk types.
                  They represent a pointer to a sector skew table.
                  The native MFM formats supported by C-128 CP/M do
                  not use a software skew.  Sectors are filled in
                  numerical order on a given track such as 1, 2, 3,
                  etc.  In this case, both bytes are set to 0.  If a
                  skew table were used, bytes 2 and 3 would point to
                  a table containing the order in which the sectors
                  are filled such as 0, 3, 6, etc.  The numbering of
                  the sectors in the skew table always starts at 0,
                  regardless of how the actual physical sectors are
                  numbered.   This table is often located in unused
                  entries in the disk parameter table, but can be
                  located anywhere in BANK 0 RAM.  It is difficult
                  to set up without a detailed knowledge of both the
                  disk organization and a CP/M memory map for the
                  specific CP/M version that you are using. In
                  addition, several disk types with the same logical
                  sector skew may share a single skew table. 

Bytes 4 to 20     represent a standard CP/M+ DPT entry, used by all
                  versions of CP/M, not just on the C-128.

Bytes 4 and 5     are referred to as the SPT.  This is the total
                  number of 128 byte records per logical track.  It
                  is a 16 bit word coded in low byte/high byte
                  format.  The size of the logical track depends on
                  both the physical format of the disk and the order
                  in which it is filled.  For example, a single
                  sided disk with 8 sectors per track, each 512
                  bytes, would have 32 records per track.  A double
                  sided disk of the same physical format may have
                  either 32 (if the logical track includes only one
                  side of the disk) or 64 (if the logical track
                  includes both sides of the disk) records per
                  logical track, depending on how the disk was
                  filled (see bits 1 to 3 of the disk type byte).

Byte 6            is called the BSH or block shift factor.  It is
                  equivalent to the logarithm in base 2 of the
                  number of 128 byte records in a disk allocation
                  unit or:

                        LOG 2 (BLS/128). 

                  The values of BSH are given below  with those for
                  BLM.

Byte 7            is the BLM or block mask.  It is equal to 1 less
                  than the number of 128 byte records in an
                  allocation unit or:

                         (BLS/128) - 1. 

                  Values for BSH  and BLM are:

   BLS (Allocation unit size)            BSH       BLM

      1024                                3           7
      2048                                4           15
      4096                                5           31     
      8192 *                              6           63     
      16384 *                             7           127
     
Note:       Block sizes marked with * are not normally used in
            floppy disk systems.  The allocation unit size (BLS) is
            not a direct entry in the DPT but is calculated by the
            operating system from the BSH and BLM values.  For
            disks with capacity of greater than 256 k bytes, a BLS
            of at least 2048 must be used.

Byte 8      is the extent mask or EXM.  This is equal to the
            maximum number of 16 k file extents that can be coded
            into a single directory entry.  The maximum values are
            given below. Values of less than the maximum can be
            used, but this wastes directory space as some of the
            available spots in the file allocation table will not
            be used.  A value of 0 must be used for disk systems
            which run under very old versions of CP/M.  (For
            example, if you want to support a disk format than runs
            on a CP/M 1.4 machine.)

            BLS               Typical EXM

                              DSM < 256     DSM > 255

            1024              0                 -
            2048              1                 0
            4096              3                 1
            8192              7                 3
            16384             15                7

Bytes 9 and 10    are a 16 bit word (DSM) representing the total
                  number of allocation units on the disk minus 1,
                  including the directory area, but excluding
                  reserved system tracks (if any).  The bytes are in
                  low byte/high byte format.  DSM can be calculated
                  from:

DSM =             (net # tracks) * (# sectors/track) /
                  (#sectors/allocation unit)

            where (net # tracks) is the total number of tracks on
            the disk, minus the reserved system tracks.

Bytes 11 & 12     (DRM) are the total number of directory entries on
                  the disk minus 1.  For single sided floppy disks,
                  the number of directory entries is usually 64 and
                  double sided disks, 128.  Therefore, byte 11 is
                  usually either $3F (63) or $7F (127) while byte 12
                  is normally 0.  The minimum number of directory
                  entries is one AU worth, which is 32 for 1k AU's,
                  64 for 2k AU's, or 128 for 4k AU's.  In theory,
                  the maximum number is 16 AU's worth, although in
                  practice, except for very large fixed disks (i.e.
                  many megabytes), this would rarely be used.  For
                  example, if 16 AU's were assigned to a directory
                  for a disk with 2k AU size, you would have 1024
                  directory entries.  While this may seem nice,
                  consider that each directory entry represents a
                  file that will occupy at least 2k of disk space
                  (i.e. 1 AU).  This implies a disk size of at least
                  2k x 1024 or 2 megabytes!!  Using a directory of
                  that size for a floppy disk is just a waste of
                  space (the directory alone would consume 32k disk
                  space).

Bytes 13 & 14     (called AL0 and AL1) give the number of AU's which
                  are reserved for directory use.  This is an
                  inverted 16 bit number of the following format:

           <----- Byte 13 ----->  <----- Byte 14 ------>
     Bit   7  6  5  4  3  2  1  0  7  6  5  4  3  2  1  0
Position   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F

      Each position which is set to 1 (starting at position 0)
      indicates one allocation unit reserved for a directory
      block. Typically with 2 AU's reserved for the directory,
      this results in positions 0 and 1 being set, giving a value
      of $C0 for byte 13 and 0 for byte 14.

Bytes 15 & 16     are called the directory checksum vector, CKS.
                  The 16 bit value, in low byte/high byte order, is
                  equal to (DRM + 1)/4.  For 64 directory entries,
                  byte 15 has a value of $10 (16), while for 128
                  directory entries it has a value of $20 (32).  In
                  both cases, byte 16 has a value of 0.   If the disk
                  does not require check-summing (i.e. it is a 'non-
                  removable' disk such as a hard disk or a RAM
                  disk), then byte 16 is set to $80 and byte 15 is
                  set to 0.

Bytes 17 & 18     give the track number of the first directory
                  sector (OFF).  This is used for disk partitioning
                  and to skip reserved system tracks at the
                  beginning of the disk.  Byte 17 is typically in
                  the range of 1 to 4, while byte 18 is normally 0.
                  To create your own custom disk format which uses
                  all of the disk (i.e. no reserved system tracks),
                  set both bytes to 0.

Byte 19           is the physical sector shift factor or PSH.  It is
                  equal to:

                  PSH = LOG 2({sector-size} / 128).  

                  Values are given below with PHM.

Byte 20           is the physical sector mask or PHM.  It is equal
                  to:

                  PHM = {sector-size} / 128 - 1
 
                  Physical sector size          PSH   PHM
                  128 bytes                     0     0
                  256                           1     1
                  512                           2     3
                  1024                          3     7

Bytes 21 to 31    are not part of a standard CP/M disk parameter
                  table but are used by the C-128 version of CP/M.
                  Byte 21 is the number of sectors on a physical
                  track.  Bytes 22 to 31 are an ASCII text string
                  describing the disk name.  This is the name which
                  pops up in the disk selection box at the bottom of
                  the screen when the system cannot decide what the
                  disk  format is.  Otherwise, it is not used.

Customizing your DPT

What purpose does all of this detailed technical info serve, you
ask?  Well  by playing with the values, you can get your C-128 to
read and write the disks from your uncle Fred's ancient CP/M
machine or you can create your own CP/M disk formats that no-one
else can read to protect your data.  

The easiest way to change the DPT is by editing the CPM+.SYS file
with a debugger utility such as SID.COM to load the CPM+.SYS file
into memory, then change the individual bytes, and save the
modified file.  Each time you boot up CP/M in the future, you
would have automatic support for these other disk formats.  You
could also change the parameters in RAM once the computer has
been booted, but remember they are stored in BANK 0 RAM and will
require special programming in the common area to do this.  Try
high RAM location  starting at $fe00 for the location of such a
program.  This area is normally used as a disk buffer and is free
for non-disk I/O programs which need common BANK 0/BANK 1 memory.
Changing the parameters in RAM is only a temporary measure, while
changing the CPM+.SYS file is permanent. Take your pick.

The locations of the seven unused disk parameter table entries in
the CPM+.SYS file when using SID are as follows:

      AUG         DEC/MAY

      $1976       $1efd
      $1996       $1f1d
      $19b6       $1f7d
      $19d6       $1f9d
      $1a16       $1fbd
      $1a36       $1fdd
      $1a56       $205d

The end of file (EOF) for the AUG version is $5D00, while for the
DEC versions, it is $6400, $6300 for the MAY version, and $6500
for the MAY-VT version.  These numbers will be needed later when
re-writing  the file.  You should always use a backup work disk
when doing these changes because your CPM+.SYS file will be
changed permanently. Do not modify your original system disk!!!

The disk parameter table entries begin at the bytes specified
above,  according to the byte parameters previously described.
Select an unused  spot then use SID's "D" command to display the
memory at that location.   For example, d1976 <return> will
display memory starting at $1976.  If the  display does not
vaguely resemble the format of Table 5-1, then stop because  you
do not have the correct memory area.  (Check to see that you have
the correct version of CP/M then try again).  These locations can
be changed  using SID's "S" command to the values for the new
formats that you wish to  support.  Once the file has been
changed, it can be saved again using SID's  "W" command:

      wcpm+.sys,100,(EOF value)<return>

where (EOF value) is the  one listed above for your CP/M
version).  In order to use your new  format, you must do a cold
reset (i.e. push the reset button or  do a <CONTROL>-<ENTER>.

Table 5-2 contains the values for several disk formats which can
be easily added to your system.  The MAXI-71 and MAXI-81 formats
are ones which were developed specifically for the C-128 to take
advantage of the full disk capacity (about 396k for the 1571 and
796k for the 1581).  These two formats use 1024 byte sectors,
double  sided, 5 sectors per track, numbered 0 to 4.   To create
disks for these new formats, you will need to use an external
disk definition program, such as JUGG'LER-128, which provides
read; write and formatting support for over 140 types of CP/M
disks. 

Table 5-1:  The unmodified C-128 CP/M disk parameter table

D876 39 91 00 00 40 00 04 0F 01 97 00 7F 00 C0 00 20:9...@......_.@. 
D886 00 02 00 01 01 10 45 70 73 6F 6E 20 51 58 31 30:......Epson QX10
D896 CD A1 00 00 50 00 04 0F 01 BD 00 7F 00 C0 00 20:M!..P....=._.@. 
D8A6 00 02 00 02 03 0A 45 70 73 6F 6E 20 51 58 31 30:......Epson QX10
D8B6 49 A5 00 00 20 00 03 07 00 9B 00 3F 00 C0 00 10:I%........?.@..
D8C6 00 01 00 02 03 08 20 49 42 4D 2D 38 20 53 53 20:......IBM-8 SS 
D8D6 49 A5 00 00 20 00 04 0F 01 9D 00 3F 00 80 00 10:I%........?....
D8E6 00 01 00 02 03 08 20 49 42 4D 2D 38 20 44 53 20:......IBM-8 DS 
D8F6 4C E2 00 00 28 00 04 0F 01 C4 00 7F 00 C0 00 20:Lb..(....D._.@. 
D906 00 01 00 02 03 0A 4B 61 79 50 72 6F 20 49 56 20:......KayPro IV 
D916 4C E0 00 00 28 00 03 07 00 C2 00 7F 00 F0 00 20:L@..(....B._.p. 
D926 00 01 00 02 03 0A 4B 61 79 50 72 6F 20 49 49 20:......KayPro II 
D936 63 B1 00 00 28 00 03 07 00 B8 00 3F 00 C0 00 10:c1..(....8.?.@..
D946 00 03 00 03 07 05 4F 73 62 6F 72 6E 65 20 44 44:......Osborne DD
D956 4B A3 00 00 20 00 04 0F 01 9D 00 3F 00 80 00 10:K#........?....
D966 00 01 00 02 03 08 20 20 53 6C 69 63 65 72 20 20:...... Slicer  
D976 39 91 00 00 40 00 04 0F 01 8F 00 7F 00 C0 00 20:9...@......_.@. 
D986 00 04 00 01 01 10 45 70 73 6F 6E 20 45 75 72 6F:......Epson Euro
D996 FF 80 00 00 50 00 04 0F 01 BD 00 7F 00 C0 00 20:_...P....=._.@. 
D9A6 00 02 00 02 03 08 20 20 20 4E 6F 6E 65 20 20 20:......  None   
D9B6 FF 80 00 00 50 00 04 0F 01 BD 00 7F 00 C0 00 20:_...P....=._.@. 
D9C6 00 02 00 02 03 08 20 20 20 4E 6F 6E 65 20 20 20:......  None   
D9D6 FF 80 00 00 50 00 04 0F 01 BD 00 7F 00 C0 00 20:_...P....=._.@. 
D9E6 00 02 00 02 03 08 20 20 20 4E 6F 6E 65 20 20 20:......  None   
D9F6 FF 80 00 00 50 00 04 0F 01 BD 00 7F 00 C0 00 20:_...P....=._.@. 
DA06 00 02 00 02 03 08 20 20 20 4E 6F 6E 65 20 20 20:......  None   
DA16 FF 80 00 00 50 00 04 0F 01 BD 00 7F 00 C0 00 20:_...P....=._.@. 
DA26 00 02 00 02 03 08 20 20 20 4E 6F 6E 65 20 20 20:......  None   
DA36 FF 80 00 00 50 00 04 0F 01 BD 00 7F 00 C0 00 20:_...P....=._.@. 
DA46 00 02 00 02 03 08 20 20 20 4E 6F 6E 65 20 20 20:......  None   
DA56 FF 80 00 00 50 00 04 0F 01 BD 00 7F 00 C0 00 20:_...P....=._.@. 
DA66 00 02 00 02 03 08 20 20 20 4E 6F 6E 65 20 20 20:......  None   

Note:       The address range given above is for the "1 Aug 85" version
            of the CPM+.SYS file.  The "6 Dec 85" and "8 Dec 85" start at
            address D6BD, while the "28 May 87" version starts at D860
            and the MAY-VT version starts at D891.

 Table 5-2: Disk Parameter Table values for selected new disk formats
         (Note: all values are in hex)

                                                Disk Format
------+-----------+-------------+-------------+---------+-------þ--+--------+ 

      +XEROX 16-8 + OLYMPIA ETX +OLYMPIA EX100+TELEVIDEO+ MAXI-71  + MAXI-81+
Byte# +   DS      +     SS      +      DS     +   DS    +   DS     +  DS    +
------+-----------+-------------+-------------+---------+-------þ--+--------+ 

0         4b           4b            4b           3d         62        62   
1         a5           a5            a3           91         b0        b0   
2          0            0             0            0          0         0   
3          0            0             0            0          0         0   
4         24           24            24           48         50        50   
5          0            0             0            0          0         0   
6          4            3             4            4          4         4   
7          f            7             f            f          f         f   
8          1            0             0            0          1         0   
9         ae           9b            ae           bd         c8        90   
10         0            0             0            0          0         1   
11        3f           3f            7f           7f         7f        7f   
12         0            0             0            0          0         0   
13        80           c0            c0           c0         c0        c0   
14         0            0             0            0          0         0   
15        10           20            20           20         20        20   
16         0            0             0            0          0         0   
17         2            2             2            2          0         0   
18         0            0             0            0          0         0   
19         2            2             2            1          3         3   
20         3            3             3            1          7         7   
21         9            9             9            12         5         5   
22        58           65            4f           54         4d        4d   
23        65           74            2d           65         61        61   
24        72           78            45           6c         78        78   
25        6f           20            58           65         69        69   
26        78           49            20           76         20        20   
27        20           49            31           69         37        38   
28        31           20            30           64         31        31   
29        36           20            30           65         20        20   
30        2d           20            20           6f         20        20   
31        38           20            20           20         20        20   
------+-----------+-------------+-------------+---------+----------+--------+ 

Table 2 (con't)

                                                Disk Format
         +---------+----------+--------+--------+-----------+----------+
         + NCR -DM +  Zenith  + Zenith + Zenith + TRS-80 IV + LOBO max +
Byte#    +   DS    +  Z90 SS  + Z100 DS+ Z100 SS+    SS     +    SS    +
---------+---------+----------+--------+--------+-----------+---þ------+
0           49        39          49       49       49          3c
1           a5        91          a3       a1       a1          90
2            0         0           0        0        0           0
3            0         0           0        0        0           0
4           20        20          20       20       20          24
5            0         0           0        0        0           0
6            4         3           4        4        3           3
7            f         7           f        f        7           7
8            1         0           0        0        0           0
9           99        97          9b       97       9b          a5
10           0         0           0        0        0           0
11          7f        7f          ff       7f       3f          3f
12           0         0           0        0        0           0
13          c0        f0          f0       f0       c0          c0
14           0         0           0        0        0           0
15          20        20          40       20       10          10
16           0         0           0        0        0           0
17           3         2           2        2        1           3
18           0         0           0        0        0           0
19           2         1           2        2        2           1
20           3         1           3        3        3           1
21           8         10          8        8        8          12
22          4e         48         48       48       54          4c
23          43         65         5a       5a       52          6f
24          52         61         20       20       53          62
25          20         74         31       31       2d          6f
26          20         68         30       30       49          20
27          20         20         30       30       56          20
28          20         39         20       20       20          20
29          20         30         44       53       20          20
30          20         20         53       53       20          20
31          20         20         20       20       20          20
---------+---------+----------+--------+--------+-----------+---þ------+ 

The Disk Parameter Header

The other major component of accessing disk drives is the
extended disk parameter header or XDPH.   This is the working
area used by the BDOS for actual disk access.  When a disk is
logged in, the appropriate values are copied from the DPT to the
XDPH for general use.  The drive table address, which contains
the vectors to the XDPH for each logical drive can be found at
BIOS_BASE+D7.  (This is not  a documented vector location,
however, but merely a point in the BIOS DRVTBL routine which
happens to contain the address.  The correct method to get the
drive table address is to use the BIOS DRVTBL function call
directly.)   The DRVTBL is located at:

CP/M Version            DRVTBL Location

      AUG               FB78
      DEC               FBD1
      MAY               FBD1

The DRVTBL contains a series of address pointers to the disk
parameter header base address (DPH_BASE) for each logical drive
(A: to P:).  If a drive is not physically supported (drives F: to
L: and N: to P:, and M:, when no RAM expander is present),  the
drive table vector value is 0000.  The default DRVTBL vectors
are: 

                  Vector points to:
Drive             AUG         DEC         MAY
A:                FA6E        FA82        FA82
B:                FAA5        FAB9        FAB9
C:                FADC        FAF0        FAF0
D:                FB13        FB27        FB27
E:                FB4A        FB5E        FB5E
F: to L:          <--------------NOT USED---------->
M:                NOT USED    FB96        FB96
N: to P:          <--------------NOT USED---------->

For each drive the $37 byte long XDPH has the following format:

DPH_BASE-A        pointer to the sector write routine for this drive
DPH_BASE-8        pointer to the sector read routine for this drive
DPH_BASE-6        pointer to the login routine for this drive
DPH_BASE-4        pointer to the initialization routine for this
                  drive
DPH_BASE-2        physical drive assigned to the logical drive.
DPH_BASE-1        secondary disk type byte from byte 2 of DPT entry.
DPH_BASE          pointer to logical to physical sector skew table
                  (0000 if none)
DPH_BASE+2        9 bytes of scratch pad for use by BDOS
DPH_BASE+B        media flag: 0 if disk logged in, FF if disk has
                  been changed
DPH_BASE+C        pointer to DPB values for this drive (contained
                  later in entry)
DPH_BASE+E        pointer to CSV scratch pad area (used to detect
                  changed disks)
DPH_BASE+10       pointer to ALV scratch pad area (used to keep
                  track of drive storage capacity)
DPH_BASE+12       pointer to directory buffer control block (BCB)
DPH_BASE+14       pointer to data BCB
DPH_BASE+16       pointer to the directory hashing table
DPH_BASE+18       bank for hash table
DPH_BASE+19       DPT entry for this drive
DPH_BASE+2A       maximum sector number and MFM lock flag (bit 7 = 1
                  if locked)
DPH_BASE+2B       pointer to entry in master MFM DPT table

DETAILS.TXT rev 1a 96-11-04
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     THIS DOCUMENT IS COPYRIGHT (C) 1988, 1996 BY HERNE DATA
     SYSTEMS LTD.  THE MATERIAL CONTAINED HEREIN MAY BE FREELY
     USED FOR PERSONAL INFORMATION ONLY.  IF YOU REPRODUCE IT,
     THIS COPYRIGHT NOTICE MUST NOT BE REMOVED.  THIS MATERIAL
     MAY NOT BE EXPLOITED FOR COMMERCIAL PURPOSES.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Herne Data Systems Ltd., 
PO Box 250, Tiverton, ON N0G 2T0 CANADA.  
Voice/fax 519-366-2732, 
e-mail herne@herne.com, 
internet: http://www.herne.com

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

CP/M Disk Format Details

============================================================
Disk Name: A B C - 80              SS      
Type: 5 1/4     Total usable space: 152k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 7 14 5 12 3 10 1 8 15 6 13 4 11 2 9
 
 - Allocation unit size is 1024 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 97 00 3F 00 C0 00 10 00 02 00 01 01 
============================================================
Disk Name: A B Dick Magna III      DS      
Type: 5 1/4     Total usable space: 256k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 17 to 32)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 256 AU's per disk
 - Directory starts at logical track 2;
     has 256 entries and occupies 32 sectors or 8 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 03 07 00 FF 00 FF 00 FF 00 40 00 02 00 01 01 
============================================================
Disk Name: ATR-8000                DS      
Type: 5 1/4     Total usable space: 380k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 190 AU's per disk
 - Directory starts at logical track 4;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 BD 00 7F 00 C0 00 20 00 04 00 03 07 
============================================================
Disk Name: ATR-8000                SS      
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 190 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 2 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 03 07 00 BD 00 3F 00 C0 00 10 00 02 00 03 07 
============================================================
Disk Name: Access Matrix           SS      
Type: 5 1/4     Total usable space: 171k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 1 4 7 2 5 8
 
 - Allocation unit size is 1024 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 AA 00 3F 00 C0 00 10 00 02 00 02 03 
============================================================
Disk Name: Actrix                  DS      
Type: 5 1/4     Total usable space: 350k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 1 4 7 2 5 8 9 12 15 10 13 16 11 14 17
 
 - Allocation unit size is 2048 bytes; 175 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    48 00 04 0F 01 AE 00 3F 00 80 00 10 00 01 00 02 03 
============================================================
Disk Name: Actrix                  SS      
Type: 5 1/4     Total usable space: 171k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 1 4 7 2 5 8
 
 - Allocation unit size is 1024 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 AA 00 3F 00 C0 00 10 00 02 00 02 03 
============================================================
Disk Name: Adler Textwriter        SS      
Type: 5 1/4     Total usable space: 160k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 9 12 15 2 5 8 11 14 1 4 7 10 13
 
 - Allocation unit size is 1024 bytes; 160 AU's per disk
 - Directory starts at logical track 0;
     has 32 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 9F 00 1F 00 80 00 08 00 00 00 01 01 
============================================================
Disk Name: Adv. Digt'l Super-6     DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 1024 bytes/sector;   4 per track; numbered 1 to 4 (Side 2
numbered 1 to 4)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 00 9B 00 7F 00 C0 00 20 00 01 00 03 07 
============================================================
Disk Name: Adv. Digt'l Super-6     SS      
Type: 5 1/4     Total usable space: 156k bytes
  
Sector information: 
 - 1024 bytes/sector;   4 per track; numbered 1 to 4  
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 78 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 2 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 00 4D 00 3F 00 80 00 10 00 01 00 03 07 
============================================================
Disk Name: Adv. Digt'l T-DOS 312k  DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 1024 bytes/sector;   4 per track; numbered 1 to 4 (Side 2
numbered 1 to 4)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 01 9B 00 7F 00 C0 00 20 00 01 00 03 07 
============================================================
Disk Name: Adv. Digt'l T-DOS 366k  DS      
Type: 5 1/4     Total usable space: 366k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 183 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 B6 00 7F 00 C0 00 20 00 03 00 03 07 
============================================================
Disk Name: Amigo                   DS      
Type: 5 1/4     Total usable space: 392k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 196 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 C3 00 3F 00 80 00 10 00 02 00 02 03 
============================================================
Disk Name: Amigo                   SS      
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 190 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 03 07 00 BD 00 3F 00 C0 00 10 00 02 00 02 03 
============================================================
Disk Name: Ampro                   SS      
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10  
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 95 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 5E 00 3F 00 80 00 10 00 02 00 02 03 
============================================================
Disk Name: Ampro                   SS      
Type: 3 ½     Total usable space: 390k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 1 2 3 4
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 C2 00 7F 00 C0 00 20 00 02 00 03 07 
============================================================
Disk Name: Amstrad PCW             DS      
Type: 3 ½     Total usable space: 714k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 357 AU's per disk
 - Directory starts at logical track 0;
     has 256 entries and occupies 16 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    48 00 04 0F 00 64 01 FF 00 F0 00 40 00 00 00 02 03 
============================================================
Disk Name: Amstrad Vortex          DS      
Type: 3 ½     Total usable space: 708k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 1 2 3 4 5 6 7 8
 
 - Allocation unit size is 4096 bytes; 177 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    48 00 05 1F 03 B0 00 7F 00 80 00 20 00 01 00 02 03 
============================================================
Disk Name: Archive                 DS      
Type: 5 1/4     Total usable space: 360k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 180 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 B3 00 3F 00 80 00 10 00 02 00 02 03 
============================================================
Disk Name: Arisia                  SS      
Type: 5 1/4     Total usable space: 148k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 148 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 93 00 7F 00 F0 00 20 00 02 00 01 01 
============================================================
Disk Name: Avatar                  DS      
Type: 5 1/4     Total usable space: 384k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 2 6 1 5 9 3 7 
 
 - Allocation unit size is 2048 bytes; 192 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 BF 00 7F 00 C0 00 20 00 03 00 02 03 
============================================================
Disk Name: Beehive                 DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 C2 00 7F 00 C0 00 20 00 01 00 02 03 
============================================================
Disk Name: Bitelex                 SS      
Type: 5 1/4     Total usable space: 132k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15 
 
 - Allocation unit size is 1024 bytes; 132 AU's per disk
 - Directory starts at logical track 2;
     has 96 entries and occupies 12 sectors or 3 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 83 00 5F 00 E0 00 18 00 02 00 01 01 
============================================================
Disk Name: Bondwell 12             SS      
Type: 5 1/4     Total usable space: 170k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 0 to 17  
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 85 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 54 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Bondwell 14             DS      
Type: 5 1/4     Total usable space: 350k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 0 to 17 (Side 2
numbered 0 to 17)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 175 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AE 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Bondwell 2              SS      
Type: 3 ½     Total usable space: 350k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 0 to 17  
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 175 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AE 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Burr-Brown              DS      
Type: 5 1/4     Total usable space: 342k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18 (Side 2
numbered 1 to 18)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 9 1 10 2 11 3 12 4 13 5 14 6 15 7 16 8 17 
 
 - Allocation unit size is 2048 bytes; 171 AU's per disk
 - Directory starts at logical track 4;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AA 00 3F 00 80 00 10 00 04 00 01 01 
============================================================
Disk Name: C/WP Cortex             SS      
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 190 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 03 07 00 BD 00 3F 00 C0 00 10 00 02 00 02 03 
============================================================
Disk Name: CCS (1024 byte/sector)  DS      
Type: 5 1/4     Total usable space: 370k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 1 3 5 7 9 6 8
 
 - Allocation unit size is 2048 bytes; 185 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 2 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 B8 00 3F 00 80 00 10 00 03 00 03 07 
============================================================
Disk Name: CCS (256 byte/sector)   DS      
Type: 5 1/4     Total usable space: 332k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18 (Side 2
numbered 1 to 18)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 12 16 2 6 10 14 1 5 9 13 17 3 7 11 15 
 
 - Allocation unit size is 2048 bytes; 166 AU's per disk
 - Directory starts at logical track 6;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 A5 00 3F 00 80 00 10 00 06 00 01 01 
============================================================
Disk Name: CCS (512 byte/sector)   DS      
Type: 5 1/4     Total usable space: 370k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 9 2 5 8 1 4 7 10 13 16 19 12 15 18 11 14 17
 
 - Allocation unit size is 2048 bytes; 185 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 B8 00 3F 00 80 00 10 00 03 00 02 03 
============================================================
Disk Name: CDI-5000                DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 1 4 2 
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 2 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 C2 00 3F 00 80 00 10 00 02 00 03 07 
============================================================
Disk Name: Cal PC                  DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 C2 00 7F 00 C0 00 20 00 02 00 03 07 
============================================================
Disk Name: Coleco ADAM CP/M        SS    
Type: 5 1/4     Total usable space: 148k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      2 7 4 1 6 3 0 5
 
 - Allocation unit size is 1024 bytes; 148 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 93 00 3F 00 C0 00 10 00 03 00 02 03 
============================================================
Disk Name: Compugraphic MCS 5      SS      
Type: 5 1/4     Total usable space: 156k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 9B 00 3F 00 C0 00 10 00 01 00 01 01 
============================================================
Disk Name: Compustar 30            DS    
Type: 5 1/4     Total usable space: 340k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 9 
 
 - Allocation unit size is 2048 bytes; 170 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 A9 00 3F 00 80 00 10 00 02 00 02 03 
============================================================
Disk Name: Cromemco C-10           DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 11 to 20)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 2 6 1 5 9 3 7 
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 C2 00 7F 00 C0 00 20 00 01 00 02 03 
============================================================
Disk Name: Cromemco CDOS           DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 2 6 1 5 9 3 7 
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 C2 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: Cromemco CDOS           DSSD    
Type: 5 1/4     Total usable space: 173k bytes
  
Sector information: 
 - 128 bytes/sector;  18 per track; numbered 1 to 18 (Side 2
numbered 1 to 18)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 5 10 15 2 7 12 17 4 9 14 1 6 11 16 3 8 13 
 
 - Allocation unit size is 1024 bytes; 173 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    12 00 03 07 00 AC 00 3F 00 C0 00 10 00 03 00 00 00 
============================================================
Disk Name: Cromemco CDOS           SS      
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10  
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 2 6 1 5 9 3 7 
 
 - Allocation unit size is 1024 bytes; 190 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 03 07 00 BD 00 3F 00 C0 00 10 00 02 00 02 03 
============================================================
Disk Name: Cromemco CDOS           SSSD    
Type: 5 1/4     Total usable space: 83k bytes
  
Sector information: 
 - 128 bytes/sector;  18 per track; numbered 1 to 18  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 5 10 15 2 7 12 17 4 9 14 1 6 11 16 3 8 13 
 
 - Allocation unit size is 1024 bytes; 83 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    12 00 03 07 00 52 00 3F 00 C0 00 10 00 03 00 00 00 
============================================================
Disk Name: Cromemco Int'l Term     DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 9 2 5 8 1 4 7 10 13 16 19 12 15 18 11 14 17
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 C2 00 7F 00 C0 00 20 00 01 00 02 03 
============================================================
Disk Name: Cromemco Int'l Term     SS      
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10  
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 9 2 5 8 1 4 7 
 
 - Allocation unit size is 2048 bytes; 95 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 5E 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: Cykey                   DS      
Type: 5 1/4     Total usable space: 308k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15 
 
 - Allocation unit size is 2048 bytes; 154 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 99 00 3F 00 C0 00 10 00 03 00 01 01 
============================================================
Disk Name: DEC Robin               SS      
Type: 5 1/4     Total usable space: 171k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 
 
 - Allocation unit size is 1024 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 AA 00 3F 00 C0 00 10 00 02 00 02 03 
============================================================
Disk Name: DEC VT-180              SS      
Type: 5 1/4     Total usable space: 171k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 
 
 - Allocation unit size is 1024 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 AA 00 3F 00 C0 00 10 00 02 00 02 03 
============================================================
Disk Name: Digilog                 DS      
Type: 5 1/4     Total usable space: 334k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 167 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 2 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 A6 00 3F 00 80 00 10 00 03 00 03 07 
============================================================
Disk Name: Direct 1025             DS      
Type: 5 1/4     Total usable space: 306k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 153 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 00 98 00 7F 00 C0 00 20 00 03 00 01 01 
============================================================
Disk Name: Epson QX-10 (256)       DS     
Type: 5 1/4     Total usable space: 304k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 01 97 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Epson QX-10 (256-Euro)  DS     
Type: 5 1/4     Total usable space: 280k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 140 AU's per disk
 - Directory starts at logical track 4;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 01 8B 00 3F 00 80 00 10 00 04 00 01 01 
============================================================
Disk Name: Epson QX-10 (512)       DS     
Type: 5 1/4     Total usable space: 380k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 190 AU's per disk
 - Directory starts at logical track 4;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 BD 00 7F 00 C0 00 20 00 04 00 02 03 
============================================================
Disk Name: Formula 1               DS      
Type: 5 1/4     Total usable space: 346k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18 (Side 2
numbered 1 to 18)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 1 4 5 8 9 12 13 16 17 2 3 6 7 10 11 14 15 
 
 - Allocation unit size is 2048 bytes; 173 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AC 00 7F 00 C0 00 20 00 03 00 01 01 
============================================================
Disk Name: Fujitsu  Micro 8        DS      
Type: 5 1/4     Total usable space: 304k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 01 97 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Fujitsu Micro 16-s      DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8 (Side 2
numbered 1 to 8)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9B 00 3F 00 80 00 10 00 01 00 02 03 
============================================================
Disk Name: Gemini                  DS      
Type: 3 ½     Total usable space: 780k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 4096 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 05 1F 01 C2 00 7F 00 80 00 20 00 02 00 02 03 
============================================================
Disk Name: Glass Typewriter II     DS      
Type: 5 1/4     Total usable space: 380k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 9 2 5 8 1 4 7 
 
 - Allocation unit size is 2048 bytes; 190 AU's per disk
 - Directory starts at logical track 4;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 BD 00 7F 00 C0 00 20 00 04 00 02 03 
============================================================
Disk Name: Glass Typewrtr          DS      
Type: 3 ½     Total usable space: 778k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 9 2 5 8 1 4 7
 
 - Allocation unit size is 2048 bytes; 389 AU's per disk
 - Directory starts at logical track 4;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 84 01 7F 00 C0 00 20 00 04 00 02 03 
============================================================
Disk Name: Gnat Sys. 10            DS      
Type: 5 1/4     Total usable space: 340k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 11 to 20)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 170 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 A9 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: Heath Magnolia          DS      
Type: 5 1/4     Total usable space: 346k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 173 AU's per disk
 - Directory starts at logical track 3;
     has 96 entries and occupies 6 sectors or 1.5 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AC 00 5F 00 C0 00 18 00 03 00 02 03 
============================================================
Disk Name: Heath Magnolia          SS      
Type: 5 1/4     Total usable space: 166k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9  
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 83 AU's per disk
 - Directory starts at logical track 3;
     has 96 entries and occupies 6 sectors or 1.5 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 52 00 5F 00 C0 00 18 00 03 00 02 03 
============================================================
Disk Name: Hew.-Pack. 125          SS      
Type: 3 ½     Total usable space: 252k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 0 to 15  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 252 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 16 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 FB 00 7F 00 F0 00 20 00 03 00 01 01 
============================================================
Disk Name: Hewlett Packard 86, 87  DS      
Type: 5 1/4     Total usable space: 252k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 0 to 15 (Side 2
numbered 0 to 15)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 252 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 16 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 FB 00 7F 00 F0 00 20 00 03 00 01 01 
============================================================
Disk Name: IBM-PC (CP/M-86)        DS     
Type: 5 1/4     Total usable space: 316k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8 (Side 2
numbered 1 to 8)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 158 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9D 00 3F 00 80 00 10 00 01 00 02 03 
============================================================
Disk Name: IBM-PC (CP/M-86)        SS     
Type: 5 1/4     Total usable space: 156k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 9B 00 3F 00 C0 00 10 00 01 00 02 03 
============================================================
Disk Name: ICM Turbo DOS           DS      
Type: 5 1/4     Total usable space: 396k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 198 AU's per disk
 - Directory starts at logical track 0;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 C5 00 7F 00 C0 00 20 00 00 00 03 07 
============================================================
Disk Name: IMS-5000                DS      
Type: 5 1/4     Total usable space: 304k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 8 16 24 1 9 17 25 2 10 18 26 3 11 19 27 4 12 20 28 5 13
21 29 6 14 22 30 7 15 23 31
 
 - Allocation unit size is 2048 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 01 97 00 3F 00 80 00 10 00 02 00 01 01 
============================================================
Disk Name: IMS-5000                SS      
Type: 5 1/4     Total usable space: 148k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 8 1 9 2 10 3 11 4 12 5 13 6 14 7 15 
 
 - Allocation unit size is 1024 bytes; 148 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 93 00 3F 00 C0 00 10 00 03 00 01 01 
============================================================
Disk Name: Insight Enter.          DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9B 00 3F 00 80 00 10 00 02 00 01 01 
============================================================
Disk Name: Jet-80                  DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 C2 00 7F 00 C0 00 20 00 02 00 03 07 
============================================================
Disk Name: KayPro 4, 10            DS     
Type: 5 1/4     Total usable space: 394k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 0 to 9 (Side 2
numbered 10 to 19)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 197 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 C4 00 3F 00 C0 00 10 00 01 00 02 03 
============================================================
Disk Name: KayPro II, 2            SS     
Type: 5 1/4     Total usable space: 195k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 0 to 9  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 195 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 03 07 00 C2 00 3F 00 F0 00 10 00 01 00 02 03 
============================================================
Disk Name: L.N.W.-2                SS      
Type: 5 1/4     Total usable space: 166k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18  
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 5 10 15 2 7 12 17 4 9 14 1 6 11 16 3 8 13 
 
 - Allocation unit size is 2048 bytes; 83 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 52 00 3F 00 80 00 10 00 03 00 01 01 
============================================================
Disk Name: Labtam                  DS      
Type: 3 ½     Total usable space: 798k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 399 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 8E 01 7F 00 C0 00 20 00 02 00 03 07 
============================================================
Disk Name: Lexoriter               SS      
Type: 5 1/4     Total usable space: 160k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 9 12 15 2 5 8 11 14 1 4 7 10 13 
 
 - Allocation unit size is 1024 bytes; 160 AU's per disk
 - Directory starts at logical track 0;
     has 32 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 9F 00 1F 00 80 00 0A 00 00 00 01 01 
============================================================
Disk Name: Librarian 1571          DS      
Type: 5 1/4     Total usable space: 402k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 0 to 4 (Side 2
numbered 0 to 4)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 201 AU's per disk
 - Directory starts at logical track 0;
     has 256 entries and occupies 8 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 C8 00 FF 00 F0 00 40 00 00 00 03 07 
============================================================
Disk Name: Librarian 1581          DS      
Type: 3 ½     Total usable space: 802k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 0 to 4 (Side 2
numbered 0 to 4)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 401 AU's per disk
 - Directory starts at logical track 0;
     has 512 entries and occupies 16 sectors or 8 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 00 90 01 FF 01 FF 00 80 00 00 00 03 07 
============================================================
Disk Name: Lobo Max-80 (256 byte)  DS      
Type: 5 1/4     Total usable space: 346k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 0 to 17 (Side 2
numbered 0 to 17)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 173 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 00 AC 00 7F 00 C0 00 20 00 03 00 01 01 
============================================================
Disk Name: Lobo Max-80 (256 byte)  SS      
Type: 5 1/4     Total usable space: 166k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 0 to 17  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 166 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 A5 00 3F 00 C0 00 10 00 03 00 01 01 
============================================================
Disk Name: Lobo Max-80 (512 byte)  DS      
Type: 5 1/4     Total usable space: 384k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 0 to 9 (Side 2
numbered 0 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 192 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 BF 00 7F 00 C0 00 20 00 03 00 02 03 
============================================================
Disk Name: MAXI 1571               DS      
Type: 5 1/4     Total usable space: 402k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 0 to 4 (Side 2
numbered 0 to 4)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 201 AU's per disk
 - Directory starts at logical track 0;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 C8 00 7F 00 C0 00 20 00 00 00 03 07 
============================================================
Disk Name: MAXI 1581               DS      
Type: 3 ½     Total usable space: 802k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 0 to 4 (Side 2
numbered 0 to 4)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 401 AU's per disk
 - Directory starts at logical track 0;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 00 90 01 7F 00 C0 00 20 00 00 00 03 07 
============================================================
Disk Name: MG 1581                 DS      
Type: 3 ½     Total usable space: 782k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 391 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 00 86 01 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: Magic                   DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 C2 00 3F 00 80 00 10 00 02 00 02 03 
============================================================
Disk Name: Mega-88 Turbo DOS       DS      
Type: 5 1/4     Total usable space: 308k bytes
  
Sector information: 
 - 1024 bytes/sector;   4 per track; numbered 1 to 4 (Side 2
numbered 1 to 4)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 154 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 01 99 00 7F 00 C0 00 20 00 01 00 03 07 
============================================================
Disk Name: Micro Source M-6000     DS      
Type: 5 1/4     Total usable space: 380k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 11 to 20)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 2 6 1 5 9 3 7 10 14 18 12 16 11 15 19 13 17
 
 - Allocation unit size is 2048 bytes; 190 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 BD 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: MicroBee                DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      1 4 7 0 3 6 9 2 5 8 
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 C2 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: Micron Quark            DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 1024 bytes/sector;   4 per track; numbered 1 to 4 (Side 2
numbered 1 to 4)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 00 9B 00 7F 00 C0 00 20 00 01 00 03 07 
============================================================
Disk Name: Molecular S-9           DS      
Type: 5 1/4     Total usable space: 360k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 180 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    48 00 04 0F 01 B3 00 7F 00 C0 00 30 00 02 00 02 03 
============================================================
Disk Name: Morrow MD2              SS      
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 1 4 2 
 
 - Allocation unit size is 2048 bytes; 95 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 5E 00 7F 00 C0 00 20 00 02 00 03 07 
============================================================
Disk Name: Morrow MD3,5,11,16,34   DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 1 4 2 
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 192 entries and occupies 6 sectors or 3 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 C2 00 BF 00 E0 00 30 00 02 00 03 07 
============================================================
Disk Name: Morrow Turbo DOS        DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 1024 bytes/sector;   4 per track; numbered 1 to 4 (Side 2
numbered 1 to 4)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 00 9B 00 7F 00 C0 00 20 00 01 00 03 07 
============================================================
Disk Name: Mountain Control        DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 2 6 1 5 9 3 7 10 14 18 12 16 11 15 19 13 17
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 C2 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: Multiflex               SS      
Type: 5 1/4     Total usable space: 166k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 1 4 7 2 5 8 
 
 - Allocation unit size is 2048 bytes; 83 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 52 00 3F 00 80 00 10 00 03 00 02 03 
============================================================
Disk Name: NCR Decision Mate       DS      
Type: 5 1/4     Total usable space: 308k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8 (Side 2
numbered 1 to 8)
 - Disk is filled all first side, then second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 154 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 99 00 7F 00 C0 00 20 00 03 00 02 03 
============================================================
Disk Name: NEC PC-8001             SS      
Type: 5 1/4     Total usable space: 152k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 97 00 3F 00 C0 00 10 00 02 00 01 01 
============================================================
Disk Name: NEC PC-8431             SS      
Type: 3 ½     Total usable space: 304k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 152 AU's per disk
 - Directory starts at logical track 4;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 97 00 7F 00 C0 00 20 00 04 00 01 01 
============================================================
Disk Name: NEC PC-8801             DS      
Type: 5 1/4     Total usable space: 304k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 01 97 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Nelma Persona           SS      
Type: 5 1/4     Total usable space: 171k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 
 
 - Allocation unit size is 1024 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 AA 00 3F 00 C0 00 10 00 02 00 02 03 
============================================================
Disk Name: Olivetti 240            SS      
Type: 3 ½     Total usable space: 320k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15
 
 - Allocation unit size is 2048 bytes; 160 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9F 00 3F 00 80 00 10 00 01 00 01 01 
============================================================
Disk Name: Olivetti ETV-300        SS      
Type: 5 1/4     Total usable space: 171k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18  
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 10 12 14 16 1 3 5 7 9 11 13 15 17 
 
 - Allocation unit size is 1024 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 AA 00 3F 00 C0 00 10 00 02 00 01 01 
============================================================
Disk Name: Olivetti M20            DS      
Type: 5 1/4     Total usable space: 256k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 256 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 FF 00 3F 00 C0 00 10 00 03 00 01 01 
============================================================
Disk Name: Olympia ETX-II          SS      
Type: 5 1/4     Total usable space: 171k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 AA 00 7F 00 F0 00 20 00 02 00 02 03 
============================================================
Disk Name: Olympia EX-100          DS      
Type: 5 1/4     Total usable space: 350k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 175 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AE 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: Osborne 1               SSSD    
Type: 5 1/4     Total usable space: 92k bytes
  
Sector information: 
 - 256 bytes/sector;  10 per track; numbered 1 to 10  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 9 
 
 - Allocation unit size is 2048 bytes; 46 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    14 00 04 0F 01 2D 00 3F 00 80 00 10 00 03 00 01 01 
============================================================
Disk Name: Osborne 1/Executive     SS     
Type: 5 1/4     Total usable space: 185k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 185 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 2 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 03 07 00 B8 00 3F 00 C0 00 10 00 03 00 03 07 
============================================================
Disk Name: Osborne G2              DS      
Type: 5 1/4     Total usable space: 380k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 6 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 190 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 00 BD 00 7F 00 C0 00 20 00 02 00 03 07 
============================================================
Disk Name: Osborne Nuevo/Vixen     DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 1 3 5 7 9 6 8
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 C2 00 7F 00 C0 00 20 00 01 00 03 07 
============================================================
Disk Name: Otrona Attache          DS      
Type: 5 1/4     Total usable space: 364k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 182 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 B5 00 7F 00 C0 00 20 00 03 00 02 03 
============================================================
Disk Name: PMC MicroMate           DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 C2 00 7F 00 C0 00 20 00 01 00 03 07 
============================================================
Disk Name: Panasonic KXE-828       DS      
Type: 5 1/4     Total usable space: 304k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 01 97 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Pegasus Data Logger     DS      
Type: 5 1/4     Total usable space: 342k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 1 4 7 2 5 8 9 12 15 10 13 16 11 14 17
 
 - Allocation unit size is 2048 bytes; 171 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    48 00 04 0F 00 AA 00 3F 00 80 00 10 00 03 00 02 03 
============================================================
Disk Name: Philips PC-2010         SS      
Type: 5 1/4     Total usable space: 152k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15 
 
 - Allocation unit size is 1024 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 97 00 3F 00 C0 00 10 00 02 00 01 01 
============================================================
Disk Name: Portapak                DS      
Type: 3 ½     Total usable space: 778k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 9
 
 - Allocation unit size is 2048 bytes; 389 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 84 01 7F 00 C0 00 20 00 03 00 02 03 
============================================================
Disk Name: Royal Alphatronic       DS      
Type: 5 1/4     Total usable space: 304k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 04 0F 01 97 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Sage IV                 DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8 (Side 2
numbered 1 to 8)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9B 00 3F 00 80 00 10 00 02 00 02 03 
============================================================
Disk Name: Sanyo MBC-1000, 1150    DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 9 12 15 2 5 8 11 14 1 4 7 10 13 
 
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9B 00 3F 00 80 00 10 00 02 00 01 01 
============================================================
Disk Name: Seequa Chameleon        DS      
Type: 5 1/4     Total usable space: 316k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8 (Side 2
numbered 1 to 8)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 158 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9D 00 3F 00 80 00 10 00 01 00 02 03 
============================================================
Disk Name: Seequa Chameleon        SS      
Type: 5 1/4     Total usable space: 156k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 9B 00 3F 00 C0 00 10 00 01 00 02 03 
============================================================
Disk Name: Sharp MZ-80             DS    
Type: 5 1/4     Total usable space: 340k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 170 AU's per disk
 - Directory starts at logical track 1;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 A9 00 7F 00 C0 00 20 00 01 00 02 03 
============================================================
Disk Name: Slicer                  DS     
Type: 5 1/4     Total usable space: 316k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 158 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9D 00 3F 00 80 00 10 00 01 00 02 03 
============================================================
Disk Name: Sony SMC-70             SS      
Type: 3 ½     Total usable space: 272k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 3 6 9 12 15 2 5 8 11 14 1 4 7 10 13
 
 - Allocation unit size is 2048 bytes; 136 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 87 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Spectravideo SV-328     DS      
Type: 5 1/4     Total usable space: 326k bytes
  
Sector information: 
 - 256 bytes/sector;  17 per track; numbered 1 to 17 (Side 2
numbered 1 to 17)
 - Disk is filled all first side, then second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 163 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    22 00 04 0F 01 A2 00 3F 00 80 00 10 00 03 00 01 01 
============================================================
Disk Name: SuperBrain              DS    
Type: 5 1/4     Total usable space: 340k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 9 
 
 - Allocation unit size is 2048 bytes; 170 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 A9 00 3F 00 80 00 10 00 02 00 02 03 
============================================================
Disk Name: SuperBrain 40 Track     SS    
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 9 
 
 - Allocation unit size is 2048 bytes; 95 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 5E 00 3F 00 80 00 10 00 02 00 02 03 
============================================================
Disk Name: SuperBrain Jr.          SS    
Type: 5 1/4     Total usable space: 164k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 9 
 
 - Allocation unit size is 2048 bytes; 82 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 51 00 3F 00 80 00 10 00 02 00 02 03 
============================================================
Disk Name: Systel 2                SS      
Type: 5 1/4     Total usable space: 171k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 AA 00 7F 00 F0 00 20 00 02 00 02 03 
============================================================
Disk Name: Systel 3                DS      
Type: 5 1/4     Total usable space: 350k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 175 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AE 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: TI Pro. CP/M-86         SS      
Type: 5 1/4     Total usable space: 156k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 9B 00 3F 00 C0 00 10 00 01 00 02 03 
============================================================
Disk Name: TRS-80 Color Power II   SS      
Type: 5 1/4     Total usable space: 171k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 03 07 00 AA 00 3F 00 C0 00 10 00 02 00 01 01 
============================================================
Disk Name: TRS-80 Mod 3/Holmes     DS      
Type: 5 1/4     Total usable space: 382k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 0 to 9 (Side 2
numbered 10 to 19)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 191 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 BE 00 3F 00 F0 00 10 00 02 00 02 03 
============================================================
Disk Name: TRS-80 Mod 3/M.M.       SS      
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10  
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 95 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 5E 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: TRS-80 Mod 4 CP/M+      SS      
Type: 5 1/4     Total usable space: 156k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8  
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 9B 00 3F 00 C0 00 10 00 01 00 02 03 
============================================================
Disk Name: TRS-80 Mod 4/MTZ (256)  DS      
Type: 5 1/4     Total usable space: 350k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18 (Side 2
numbered 1 to 18)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 10 12 14 16 1 3 5 7 9 11 13 15 17 
 
 - Allocation unit size is 2048 bytes; 175 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AE 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: TRS-80 Mod 4/MTZ (256)  SS      
Type: 5 1/4     Total usable space: 170k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 10 12 14 16 1 3 5 7 9 11 13 15 17 
 
 - Allocation unit size is 2048 bytes; 85 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 54 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: TRS-80 Mod 4/MTZ (512)  DS      
Type: 5 1/4     Total usable space: 400k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 9 
 
 - Allocation unit size is 2048 bytes; 200 AU's per disk
 - Directory starts at logical track 0;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 C7 00 7F 00 C0 00 20 00 00 00 02 03 
============================================================
Disk Name: TRS-80 Mod 4/MTZ (512)  SS      
Type: 5 1/4     Total usable space: 200k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 2 4 6 8 1 3 5 7 9 
 
 - Allocation unit size is 2048 bytes; 100 AU's per disk
 - Directory starts at logical track 0;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 63 00 7F 00 C0 00 20 00 00 00 02 03 
============================================================
Disk Name: TRS-80 Model 1          SSSD    
Type: 5 1/4     Total usable space: 101k bytes
  
Sector information: 
 - 256 bytes/sector;  10 per track; numbered 0 to 9  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 101 AU's per disk
 - Directory starts at logical track 0;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    14 00 03 07 00 64 00 3F 00 C0 00 10 00 00 00 01 01 
============================================================
Disk Name: TRS-80 Model 1/Omicron  SSSD    
Type: 5 1/4     Total usable space: 72k bytes
  
Sector information: 
 - 128 bytes/sector;  18 per track; numbered 1 to 18  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 12 16 2 6 10 14 1 5 9 13 17 3 7 11 15 
 
 - Allocation unit size is 1024 bytes; 72 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    12 00 03 07 00 47 00 3F 00 C0 00 10 00 03 00 00 00 
============================================================
Disk Name: Tektronix 4170          DS      
Type: 5 1/4     Total usable space: 308k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8 (Side 2
numbered 1 to 8)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 154 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 00 99 00 3F 00 80 00 20 00 01 00 02 03 
============================================================
Disk Name: TeleVideo   Turbo DOS   DS      
Type: 5 1/4     Total usable space: 400k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5 (Side 2
numbered 1 to 5)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 200 AU's per disk
 - Directory starts at logical track 0;
     has 128 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    50 00 04 0F 01 C7 00 7F 00 C0 00 20 00 00 00 03 07 
============================================================
Disk Name: TeleVideo 801, 806      DS      
Type: 5 1/4     Total usable space: 342k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18 (Side 2
numbered 1 to 18)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 171 AU's per disk
 - Directory starts at logical track 4;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 00 AA 00 3F 00 80 00 10 00 04 00 01 01 
============================================================
Disk Name: Telectronics CP/M 68k   DS      
Type: 5 1/4     Total usable space: 346k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18 (Side 2
numbered 1 to 18)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 173 AU's per disk
 - Directory starts at logical track 4;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AC 00 3F 00 80 00 10 00 04 00 01 01 
============================================================
Disk Name: Teletek SystemMaster    DS      
Type: 5 1/4     Total usable space: 346k bytes
  
Sector information: 
 - 256 bytes/sector;  18 per track; numbered 1 to 18 (Side 2
numbered 1 to 18)
 - Disk is filled all first side, then second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 6 12 1 7 13 2 8 14 3 9 15 4 10 16 5 11 17 
 
 - Allocation unit size is 2048 bytes; 173 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AC 00 7F 00 C0 00 20 00 03 00 01 01 
============================================================
Disk Name: Tomcat 1800G            DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 2 6 1 5 9 3 7 
 
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 00 C2 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: Toshiba T-100           DS      
Type: 5 1/4     Total usable space: 256k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15 16 20 24 28 17 21 25
29 18 22 26 30 19 23 27 31
 
 - Allocation unit size is 1024 bytes; 256 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    40 00 03 07 00 FF 00 3F 00 C0 00 10 00 03 00 01 01 
============================================================
Disk Name: Toshiba T-200           DS      
Type: 5 1/4     Total usable space: 256k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15 
 
 - Allocation unit size is 1024 bytes; 256 AU's per disk
 - Directory starts at logical track 6;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 FF 00 3F 00 C0 00 10 00 06 00 01 01 
============================================================
Disk Name: Wang-Writer             DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9B 00 7F 00 C0 00 20 00 02 00 01 01 
============================================================
Disk Name: Wavemate Bullet         SS      
Type: 5 1/4     Total usable space: 190k bytes
  
Sector information: 
 - 1024 bytes/sector;   5 per track; numbered 1 to 5  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 190 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 2 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 03 07 00 BD 00 3F 00 C0 00 10 00 02 00 03 07 
============================================================
Disk Name: XOR-5                   DS      
Type: 5 1/4     Total usable space: 384k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 1 to 10)
 - Disk is filled track 0, first side, then track 0, second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 5 1 6 2 7 3 8 4 9 
 
 - Allocation unit size is 2048 bytes; 192 AU's per disk
 - Directory starts at logical track 3;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 BF 00 7F 00 C0 00 20 00 03 00 02 03 
============================================================
Disk Name: Xerox 16/8              DS      
Type: 5 1/4     Total usable space: 342k bytes
  
Sector information: 
 - 512 bytes/sector;   9 per track; numbered 1 to 9 (Side 2
numbered 1 to 9)
 - Disk is filled all first side, then second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 171 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    24 00 04 0F 01 AA 00 7F 00 C0 00 20 00 02 00 02 03 
============================================================
Disk Name: Xerox 820               SSSD    
Type: 5 1/4     Total usable space: 83k bytes
  
Sector information: 
 - 128 bytes/sector;  18 per track; numbered 1 to 18  
 
Logical Layout:
 - Sector order logical fill table (soft skew): 
      0 5 10 15 2 7 12 17 4 9 14 1 6 11 16 3 8 13 
 
 - Allocation unit size is 1024 bytes; 83 AU's per disk
 - Directory starts at logical track 3;
     has 32 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    12 00 03 07 00 52 00 1F 00 80 00 08 00 03 00 00 00 
============================================================
Disk Name: Xerox 820-II            DS      
Type: 5 1/4     Total usable space: 326k bytes
  
Sector information: 
 - 256 bytes/sector;  17 per track; numbered 1 to 17 (Side 2
numbered 1 to 17)
 - Disk is filled all first side, then second side 
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 163 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    22 00 04 0F 01 A2 00 3F 00 C0 00 10 00 03 00 01 01 
============================================================
Disk Name: Xerox 820-II            SS      
Type: 5 1/4     Total usable space: 157k bytes
  
Sector information: 
 - 256 bytes/sector;  17 per track; numbered 1 to 17  
 - System tracks are formatted differently than data tracks.
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 157 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    22 00 03 07 00 9C 00 3F 00 C0 00 10 00 03 00 01 01 
============================================================
Disk Name: Xerox/Sunrise Laptop    SS      
Type: 5 1/4     Total usable space: 156k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 156 AU's per disk
 - Directory starts at logical track 1;
     has 64 entries and occupies 4 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 9B 00 3F 00 C0 00 10 00 01 00 02 03 
============================================================
Disk Name: Zenith Z-100            DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8 (Side 2
numbered 1 to 8)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 2;
     has 256 entries and occupies 16 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 01 9B 00 FF 00 F0 00 40 00 02 00 02 03 
============================================================
Disk Name: Zenith Z-100            SS      
Type: 5 1/4     Total usable space: 152k bytes
  
Sector information: 
 - 512 bytes/sector;   8 per track; numbered 1 to 8  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 8 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 97 00 7F 00 F0 00 20 00 02 00 02 03 
============================================================
Disk Name: Zenith Z-37             SSSD    
Type: 5 1/4     Total usable space: 92k bytes
  
Sector information: 
 - 256 bytes/sector;  10 per track; numbered 1 to 10  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 92 AU's per disk
 - Directory starts at logical track 3;
     has 64 entries and occupies 8 sectors or 2 AU's
 
Standard disk parameter table entry (values in HEX):
    14 00 03 07 00 5B 00 3F 00 C0 00 10 00 03 00 01 01 
============================================================
Disk Name: Zenith Z-89/90          DS      
Type: 5 1/4     Total usable space: 312k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16 (Side 2
numbered 1 to 16)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 156 AU's per disk
 - Directory starts at logical track 2;
     has 256 entries and occupies 32 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 04 0F 00 9B 00 FF 00 F0 00 40 00 02 00 01 01 
============================================================
Disk Name: Zenith Z-90             SS      
Type: 5 1/4     Total usable space: 152k bytes
  
Sector information: 
 - 256 bytes/sector;  16 per track; numbered 1 to 16  
 
Logical Layout:
 - Allocation unit size is 1024 bytes; 152 AU's per disk
 - Directory starts at logical track 2;
     has 128 entries and occupies 16 sectors or 4 AU's
 
Standard disk parameter table entry (values in HEX):
    20 00 03 07 00 97 00 7F 00 F0 00 20 00 02 00 01 01 
============================================================
Disk Name: Zorba                   DS      
Type: 5 1/4     Total usable space: 390k bytes
  
Sector information: 
 - 512 bytes/sector;  10 per track; numbered 1 to 10 (Side 2
numbered 11 to 20)
 - Disk is filled track 0, first side, then track 0, second side 
 
Logical Layout:
 - Allocation unit size is 2048 bytes; 195 AU's per disk
 - Directory starts at logical track 2;
     has 64 entries and occupies 4 sectors or 1 AU's
 
Standard disk parameter table entry (values in HEX):
    28 00 04 0F 01 C2 00 3F 00 80 00 10 00 02 00 02 03 
 
CPM6.TXT rev 1a 96-11-01
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      THIS DOCUMENT IS COPYRIGHT (C) 1988, 1996 BY HERNE DATA
      SYSTEMS LTD.  THE MATERIAL CONTAINED HEREIN MAY BE FREELY
      USED FOR PERSONAL INFORMATION ONLY.  IF YOU REPRODUCE IT,
      THIS COPYRIGHT NOTICE MUST NOT BE REMOVED.  THIS MATERIAL
      MAY NOT BE EXPLOITED FOR COMMERCIAL PURPOSES.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Herne Data Systems Ltd., 
PO Box 250, Tiverton, ON N0G 2T0 CANADA.  
Voice/fax 519-366-2732, 
e-mail herne@herne.com
internet: http://www.herne.com

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Customizing C-128 CP/M
======================

This document deals with a number of fairly simple, but quite
useful modifications, or patches, that can be made to the CP/M
system programs.  (Note that it is fully recognized that the best
way to customize the CP/M system is to modify the source code and
re-assemble it.  However, this is not always possible or in some
case, desirable.   If you wish to make these changes to the
source code, by all means do so.  But remember: you may end up
with a system which has a non-standard memory map that may not
work with some other customizing routines or operating system
extensions.)
 
Before we get started, a bit of background info may be useful. 
Officially, there are four versions of the CP/M boot program
"CPM+.SYS" generally available for the C-128.  These can be
identified by the dates displayed when the CP/M system first
boots up:  1 AUG 85, 6 DEC 85, 8 DEC 85 and 28 MAY 87.  The 1 AUG
85 version did not support either the RS-232 port or the
1700/1750 RAM expander.  (It will be referred to as the 'AUG'
version).   Support for these were added with the 6 DEC 85
version.  A minor bug in the printer routine was corrected with
the 8 DEC 85 release (these will both be referred to as the 'DEC'
version because the patching points used in this document are
identical for both versions.); and full support was added for the
1581 drive with the 28 MAY 87 version (referred to as the MAY
version).  A fifth version, dubbed MAY-VT, can be created by re-
assembling the MAY system files with the VT-100 emulation option
enabled.  This procedure is detailed later under the heading
'Adding VT-100 Support'.  

There are also numerous modified "unofficial", customized and
beta test versions in limited circulation.  This document deals
only the four official versions, although the experienced
programmer can easily adapt the techniques explained herein to
other versions.

Although the procedure is fairly straight forward, I will assume
that the reader has a certain degree of understanding and
familiarity with the CP/M environment.  Specifically, extensive
use is made of the CP/M debugging utility "SID.COM".  (Of note to
long time C-64 users is that this program has nothing to do with
the sound chip of the same name.  In this case SID is short for
"Symbolic Instruction De-bugger".)

Note:       The addresses given in this document for the patch
            points refer to those obtained using SID or an
            equivalent file debugger which loads the file being
            patched into the normal transient program area (TPA)
            memory space.  Consequently, all addresses are
            calculated based on the beginning of the file being at
            address hex $100 (i.e. the normal start of the TPA). 
            If you are using a hex file editor which calculates its
            addresses based on the beginning of the file being
            address 0, you must subtract hex $100 from the
            addresses given here in all cases to get the patch
            point for these other programs.   For example, address
            $440 with SID, is actually offset $340 when you count
            it from the beginning of the file.  ($340 from the
            start of the TPA at $100 = $440)

CPM+.SYS

STARTING OFF

The first step in customizing your CP/M system is to boot up CP/M
and enter the SID environment.    With a copy of SID.COM on the
same disk as your CPM+.SYS file, type in:

   SID CPM+.SYS   <return>

NOTE:       USE A BACKUP WORK DISK. DO NOT DO THIS WITH YOUR
            ORIGINAL SYSTEM DISK BECAUSE IT WILL MAKE PERMANENT
            CHANGES TO THE OPERATING SYSTEM WHICH YOU MAY WISH TO
            CHANGE LATER.

After a few moments, the screen should display something like:

   CP/M 3 SID - Version x.x
   NEXT  MSZE   PC    END
   zzzz  zzzz  0100  CEFF
   #

where zzzz is a hexadecimal number indicating the length of the
CPM+.SYS file.  For the AUG version, it will have a value of
5D00; a value of 6400 for the DEC versions; a value of 6300 for
the MAY version; and a value of 6500 for the MAY-VT version.  If
one of these numbers does not show up, then proceed with caution
because you may not be working with an "official" release and
some or all of the patch points may be different.  In any case,
mark this number down because it will be needed at the end when
you save your changes.  The # is SID's normal input prompt:  it
is now awaiting your further instructions.

Throughout the remainder of this document, I will be referring to
three main SID commands.  These are "d" for display memory; "s"
for set memory (i.e. change memory bytes); and "w" for write
memory to file.  The syntax for each of these commands is
explained in documents dealing with standard CP/M utilities and
is summarized below.   Note that there is no space between the
command letter and the first argument, but a space (or comma, as
applicable) is required between arguments.

   d<start address>,<end address>
 
   s<start address>

   w<file spec>,<start address>,<end address>

In all cases, <start address> and <end address> are expressed as
hexadecimal values and both addresses are optional.  If <start
address> is omitted with the "d" command, the display starts at
the current program counter value (default start at 0100, and
with subsequent uses, it resumes from where it last left off),
while if <end address> is omitted, the next 192 bytes will be
displayed (12 lines of 16 bytes).  If <start address> and <end
address> are omitted with the "w" command, the values displayed
in SID's signon message under PC and NEXT are used as the <start
address> and <end address> respectively.  For safety sake, it is
a good idea to specify the addresses explicitly when modifying
bytes with the "s" command or writing the modified file with "w". 
That way you do not have to keep track of the default values from
the program counter.  With SID, the parameters can be separated
by either spaces or commas.

SCREEN COLORS

As part of the start-up routine, C-128 CP/M specifies the screen
colors for the foreground (characters), background and 40 column
border area.  Now, you must admit that not everyone will like the
purple characters on a black background with a brown border that
the wise folks at Commodore chose as the defaults.  Our first
task is to change them into something a bit more palatable.

On examining the CP/M source code, one finds that the start-up
routine specifies logical color 0 for the background, logical
color 4 for the foreground (i.e. the characters) and logical
color 9 for the 40 column border area.  Armed with this
knowledge, there are two ways to change the defaults: change the
logical to physical color translation table or change the logical
color codes in the start-up routine.  You need only make one of
the following set of changes, take your pick.

The first method is perhaps the easiest, and is a good
introduction to the workings of SID.  In all official versions of
C-128 CP/M, the logical to physical color translation table is in
the same spot.  Type in the following at the SID prompt "#":

      d5f0

followed by the <return> key.  (From this point on, whenever I
say to type in something, you should always press the <return>
key afterwards.)

You should see a display similar to:

05F0: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF .."3DUfw........

followed by a number of other lines of similar format.  This
first line is the logical to physical color translation table. 
(If you have previously re-defined your colors using the
KEYFIG.COM utility, all of the numbers may not appear exactly as
shown.)   Memory location 05f0 contains the physical colors
corresponding to logical color 0 for the 80 and 40 column
displays (they can be different, if you so desire), while 05ff
contains the physical colors for logical color f.  In each byte,
the low nibble, -x, contains the physical color for the 80 column
screen, while the high nibble, x-, has the color for the 40
column screen.  Initially, all logical colors are defaulted to
the corresponding physical color numbers, hence the 00 11 22 33
etc.  

Recall that logical color 0 is specified for the background.  To
change this, type in:

    s5f0

      SID will respond with:

    05F0  00 __

In this case, 00 is the current value for memory location 5f0 and
__ is the location of the cursor.  Type in your new hex value,
say 06.  (This will give a black background on the 40 col screen
and a blue one on the 80 col screen.)   The physical color
nibbles can be obtained from the following table (note the
differences between 40 column and 80 column modes):

                  Nibble Value        Color

                        0              Black
                        1              White
                        2              Red
                        3              Cyan     (light cyan 80 col)
                        4              Purple   (light purple 80 col)
                        5              Green
                        6              Blue
                        7              Yellow   (light yellow 80 col)
                        8              Orange   (dark purple 80 col)
                        9              Brown    (dark yellow 80 col)
                        a              light red
                        b              dark gray (dark cyan 80 col)
                        c              medium gray
                        d              light green
                        e              light blue
                        f              light gray
              --------------------------------------------------

SID will respond with:

    05F1  11 __

which is the next memory location to patch.  We will not make any
changes here for now, so press <return> a few times until SID
says:

    05F4  44 __

This is the foreground or character color location.  Type in the
new value, say 11, for white characters or 55 for green (like a
green screen monitor).  Press <return> a few more times until you
get:

    05F9  99 __

This is the final color location to patch.  It can be ignored if
you use an 80 column display because the border color is only
used in 40 column mode.  It is generally most appealing to set
this one to either the same color as the background or a
different shade of the same color (such as light blue with dark
blue, light red with dark red, etc.) 

After you have completed the changes, type in a period (".") to
exit the "s" command and return to the main SID input prompt (#).

(Note that it is also possible to patch this color table using
the C-128 keyboard redefinition utility KEYFIG.COM.  Bear in mind
that the logical colors to be changed to set the default screen
colors are the same as those outlined above.)

The second patch method for changing the screen colors may seem a
bit more complex to some because the precise location to modify
depends upon the version of CP/M that you are modifying.  However
the technique is virtually identical to that outlined above.  The
colors are actually set just before the sign-on message by using
a series of escape codes printed to the screen according to the
following extract from the source code:

call prt$msg            ; call the routine to print signon message
db "Z"-"@"              ; control-Z to clear screen 
                        (note this screen clear is not really
                        required)

db esc,esc,esc          ; prefix for setting color
db purple+$50           ; logical color 4 for foreground

db esc,esc,esc
db black+$60            ; logical color 0 for background

db esc,esc,esc
db brown+$70            ; logical color 9 for border

db "Z"-"@"              ; clear screen          (this is the one which is
                                                required)

db "CP/M 3.0 On the Commodore 128"  ; sign on message

db date
db cr,lf
db "                 "       ; filler
db 0                         ; end of message

(program resumes execution here)

Note that the three colors need not be specified in any given
order.  They may also be specified as physical colors rather than
logical ones.  The patch locations are as follows:

Color Code                        Location
                        AUG   DEC   MAY   MAY-VT
Foreground              28d7  2ffb  2e01  3001
Background              28db  2fff  2e05  3005
40 col border           28df  2f03  2e09  3009

All three locations are interchangeable because the color source
which is actually set by a given location depends only on the
value of byte.  To set a given location as a logical foreground
color, add $50 to the color table numbers given above.  To
specify the location as a logical background color add $60 and
for the 40 column border color add $70.  For example, if you wish
to specify the foreground as logical color 1, the background as
logical color 7 and the border as logical color 3, the byte
values would be $51, $67 and $73.

If you prefer to specify the colors as physical colors (i.e. the
logical to physical color translation table is bypassed and the
specified value is used directly as the color),  the
corresponding adders are $20 for the foreground, $30 for the
background and $40 for the border.  For example, if you used
values of $21, $32, $46 you would always have white characters on
a red background with a blue 40 column border, regardless of how
you had defined your logical colors.

Use SID's "s" command to set the appropriate locations to your
desired new values.   (Don't forget to type in a period when you
are done to return to the main SID prompt.)   It may appear that
the locations given for the DEC version are out of sequence.  I
assure you, however, that they are in correct sequence.  The
illusion is created by the obscure method in which most of the
CPM+.SYS file is stored on disk.  It is stored in 128 byte
records in reverse order (i.e. the first record after the file
header is placed into the high end of the computer's memory and
proceeds downwards).  This creates apparent discontinuities in
parts of the file which happen to cross over one of the 128 byte
record boundaries.  As we shall see in the next example, this can
also create some minor confusion when trying to patch across a
split record.

THE SIGN-ON MESSAGE

As listed above in the excerpt from the CP/M source code, a sign-
on message is included for displaying on the screen when CP/M
first boots up.  In its default form, this is a very boring
message consisting of "CP/M 3.0 ..." etc. followed by the date. 
Being in the mood for customization, we can change this to
anything that we like, up to about 50 bytes total length. 
Wouldn't it be more interesting for your computer to display a
personal greeting each time you started it up?  How about "Good
morning Fred, this is HAL speaking"?  Or "Don't bother me now,
I'm thinking"?

The patching procedures for the DEC, MAY  and MAY-VT versions are
simple and straight forward.  With the DEC version, you have 53
bytes to play with at addresses 2f05 to 2f39.  (Not including an
initial <control>-Z ($1a) at 2f04, to clear the screen before
printing the message.)  With the MAY version, you have 54 bytes
from 2e0b to 2e40, with the clear-screen at 2e0a.  With the MAY-
VT version, the 54 bytes are at 300b to 3040 and the clear screen
is at 300a.  

Your custom message can be created by using a variation of SID's
"s" command.  Type in:

      s<start address> 

where <start address> is the previously mentioned value for the
CP/M version you are using.  SID will respond with something
like:

         2F05 43 __

and will await your input.  Instead of typing in a single hex
value as before, you can type in your desired ASCII string,
preceded by a quote:

                "Fred's computer.  Good morning...

and followed by a <return>.  Note that you do not use a trailing
quote.  Anything entered after the first quote is interpreted as
part of the string.  Using a trailing quote will cause this quote
mark to be included in your message.  In addition, you should not
use trailing spaces unless you want them to be included in your
message.  SID will display the next available memory location
after your change followed by the current value of this location
and the input cursor.  Type in a period and <return> if you are
done or more text if you are not.  

You can include linefeeds (hex $0a), <return>s (hex $0d), as well
as other cursor and screen control escape codes in your message.  
These are easiest to enter with the normal "s" command outlined
above for changing the hex value of individual bytes.  (When
doing the above patch, you should use the "d" command frequently
to keep track of where you stand so you do not over-run the
available area.  You may even want to get a printed copy of the
display of the area in question, using <control>-p then d<start
address> to use as a reference for repairing the damage should
you over-run.)

When you have finished your custom message, check your overall
work with the "d" command to see how much padding you should add:

      d2f05           (or d2e0b for the MAY version)

Your message should be padded out with a series of blanks ($20
byte values) or hex 0's until you reach  (but not including)
$2f3a (DEC version),  $2e41 (MAY version) or $3041 (MAY-VT
version), at which point you should have a hex 0 byte.  This 0
byte is very important as it serves as an end of message marker. 
The print_message routine that was called at the start of the
sign-on will resume at the address immediately following this
byte.  Misplacement of the zero byte terminator may cause a
system crash.  Padding with hex 0's is acceptable because 0 is
the Z-80 machine language NOP instruction, which does nothing but
go on to the next instruction. 

Unfortunately, the sign-on message for the AUG  version is split
across a record boundary.  The first half of the message consists
of 31 bytes located at $28e1 to $28ff and the second half is 24
bytes long at $2800 to $2817.   The initial clear-screen is at
$28e0 and the 0 byte message terminator is at $2818.  It is
especially important in this case to keep track of your byte
count when entering the new message because if you over shoot the
available space, you will corrupt your system disk.

THE RUN/STOP KEY

Most people who are familiar with the operation of the C-128 in
native mode (and for that matter, most other Commodore 8-bit
computers) use the <RUN/STOP> key as sort of a "soft" reset
button to halt the execution of a BASIC, or even a machine
language program.  However, you may have also discovered that
this does not work in CP/M mode.  (How often have you been in
CP/M mode trying to abort a program and pressed <RUN/STOP> out of
habit?)   The equivalent general program exit command and soft
reset in CP/M is <control>-C.  (That is, hold down the control
key and press the letter C key at the same time.)

This next patch modifies the keyboard decoding tables to assign a
value of <control>-C (hex $03) to the <RUN/STOP> key.  The patch
point is the same for all versions of C-128 CP/M: $058c.  Change
the byte at this location from 0 (representing the equivalent of
no action) to 3 (representing a <control>-C).  That's all there
is to this patch.   Now when you press <RUN/STOP> in CP/M mode,
it will be the same as pressing <control>-C to exit a program.

THE RAM-DISK

The AUG CP/M version does not support the RAM disk, so it will
not be discussed further for this topic.  

A) The disk label

CP/M has a convenient method of assigning a name (or volume
label) to a given disk to help you keep track of which disk is
which.  (This is similar to the convention of naming a Commodore
DOS disk during formatting, except that it can be done at any
time.)   The name is assigned using the CP/M SET.COM utility.
 
The label is recorded as a special entry in the disk directory
which is normally invisible.  (You cannot see the volume label
when you do a DIR command for the disk directory.)  Certain
operating system extensions make use of the directory label as a
way of telling which disk is currently in your drive.  It can
also be a simple method of "personalizing" your disks.  A full
description on disk labels is given in the separate document "The
Disk System".

So far so good, or at least one would think so.  But, and here
comes the cruncher, you should be wary of assigning a name to
your RAM disk (drive M:).  The reason for this is quite simple:
it already has a name which is also used as a flag to control
formatting of the RAM disk on a system boot!

When CP/M boots up, it checks for the presence of the RAM disk by
looking for the RAM expansion controller (REC) registers.  If it
finds the REC to be present, it then checks the first entry of
the RAM disk directory for a "key" to see if the RAM expander has
been initialized as a CP/M RAM disk.  This key is the disk label
$20 + "ERTWINE VON" + 1.  (Von Ertwine was the chap responsible
for adapting CP/M to run on the C-128.)  If this label is not
found, the boot process will "format" the RAM disk by erasing the
directory area with hex $e5's then writing this label to the
first entry, thus losing any data which may be present already.

There are a number of reasons why you may want to preserve data
when switching modes or re-booting your system.  The most obvious
is to recover from a system crash.  If you had created or edited
files on the RAM disk without saving them to a floppy and then
subsequently had a crash or lock-up, you may want to be able to
recover the files when you re-boot.  Normally, everything in the
RAM disk would be preserved providing you did a re-boot by
pressing the reset button momentarily.  However, if you re-name
your RAM disk using SET, the key will no longer be present and
your data will not be preserved when going from CP/M to C-128
mode and then back again.  

The DEC and MAY-VT  versions are relatively simple to patch.  The
MAY version is a bit more difficult, again due to the patch area
being split across a record boundary.   For the DEC version, the
label is located at $1e5a to 1e64.  To see it type in:

      d1e59

The text "ERTWINE VON" should be shown on the first line of the
dump.  The first character is a hex $20 (ASCII space) which
indicates that the entry is a directory label.  The last byte is
a 01 which indicates that a label entry is present in the
directory.  Neither of these should be changed.  Use SID's "s"
command to change the text of the label:

      s1e5a 

      SID should respond with:

      1E5A 45 __

To make the changes, type in your new disk label as a text entry
preceded by a quote such as:

            "MIKES DISK

You must include the quote mark at the beginning.  You have
eleven characters to play with and they should be in the form of
a legal CP/M filename (i.e. all uppercase with no reserved or
special symbols such as ? or *).  Unused locations should be
padded with spaces.  When you have pressed <return>, SID will
display the next memory area, which might be:

      1E65 01

Type in a period (.) followed by <return> to signify that you are
finished.  You can check your handy work by typing in d1e59
again. 

For the MAY-VT version, the label is at 1c2e to 1c38, not
including the leading $20 and trailing 01.   It can be changed
using the same method as outlined above for the DEC version, but
using the new address.

Now for the MAY version.  The first 3 characters of the label
(ERT) are at $1cfd to 1cff, while the remainder (WINE VON) are at
$1c00 to 1c07.  To see this, type in:

d1c00 1cff 

To change the label, you will have to change the memory bytes in
both locations, bearing in mind the number of bytes used at each
location.  This can be done in two steps:

First,      use s1cfd to change the first three bytes in the label
            at $1cfd to 1cff.  Remember to type in a period when
            you have changed these three bytes to return to the SID
            command prompt.

Second      use s1c00 to change the remainder of the bytes at $1c00
            to 1c07.

B) The drive code

C-128 CP/M automatically assigns the RAM disk to drive M:.  While
this is good for most applications, there are a few CP/M programs
(mostly those designed to work under much older versions of CP/M)
which will not accept anything over D: (such as M:) as a legal
drive specifier.  In this case, you must change the RAM disk
assignment to some other letter, such as B:, C:, or D: (assuming
that you do not have a disk drive already so assigned).  Changing
the drive assignment involves making a few patches to the DRVTBL
and optionally to the code which checks for and initializes the
RAM disk.  First the DRVTBL.

For the DEC, MAY and MAY-VT versions, the DRVTBL is located
starting at $651.  It contains a set of 16 bit vectors, one for
each drive letter, to the disk parameter block for each of the
drives.  (If no drive is assigned to a given letter, the vector
has a value of 0 0.)  The first thing we must do is to "de-
allocate" drive M:.  This can be done by setting both locations
$669 and 66a to 0.  The second step is to allocate another drive
letter to the RAM disk.  The vector to the RAM disk DPB is $fb96. 
Translated to low byte/high byte format, this becomes $96 and
$fb.  The correct addresses to patch depend on the desired drive
code according to the following table:

Drive code        location for      Drive code        location for
                  96    fb                            96    fb

    A: *          651   652               B:          653   654
    C:            655   656               D:          657   658
    E: *          659   65a               F:          65b   65c
    G:            65d   65e               H:          65f   660
    I:            661   662               J:          663   664
    K:            665   666               L:          667   668
    M:            669   66a               N:          66b   66c
    O:            66d   66e               P:          66f   670

* note:     you should avoid assigning drives A: and E: to the RAM
            disk because this may cause problems with other CP/M
            system functions.

When CP/M boots up it checks for the presence of the RAM disk. 
If it is not found, the corresponding vector in the DRVTBL is
removed and replaced with 0 0.  This process assumes that the RAM
disk is assigned to drive M:.  Since we have just changed this
assignment, it is desirable to change the vector address which
will be updated.  Note that this patch is not essential, but will
ensure that you will not be able to access the RAM disk drive
code if you do not have a RAM disk installed.   With the DEC 
version the patch address is $1e10; with the MAY version, it is
$1cb3; and with the MAY-VT version it is 1ce4.  In all cases, the
contents of this byte will normally be $e9 representing the
pointer into the DRVTBL for drive M:.  This byte should be
changed to a value from the following table which corresponds to
the drive letter installed above:

Drive       value       Drive       value       Drive       value

    A:      d1              B:      d3              C:      d5
    D:      d7              E:      d9              F:      db
    G:      dd              H:      df              I:      e1
    J:      e3              K:      e5              L:      e7  
    M:      e9              N:      eb              O:      ed
    P:      ef

THE DEFAULT PRINTER

When CP/M boots up, the CP/M logical LIST device (i.e. the
printer) is assigned to the physical device PRT1 (i.e. serial
port printer with device #4).  You may wish to use another
printer device, such as device 5, or even an RS-232 port device
as the default printer.  (I have two separate monitors hooked to
my system: one for the 40 col screen, and the other for the 80. 
In some cases, I use the 40 column screen as a temporary
"printer".)  The patch address to change for the default printer
assignment is $28c4 for the AUG version, $2fe8 for the DEC
version,  $2eee for the MAY version, and $30ee for the MAY-VT
version.  Normally, this byte will have a value of $10 which
corresponds to the value of PRT1 from the following table:

Printer device          Byte value

  80COL (screen)              $40
  40COL (screen)              $20
  PRT1  (device 4)            $10
  PRT2  (device 5)            $08
  RS-232                      $02   (DEC,  MAY  and MAY-VT  versions
                                    only)

Multiple device assignments are also possible.  For example, a
value of $18 ($10 + $08) will assign the printer to both devices
4 and 5.  In the case of the RS-232 port, some fiddling with the
serial protocol of the printer may be required to match the
default baud rate and communication protocol of the C-128's RS-
232 port.

THE DRIVE SEARCH CHAIN

When CP/M is looking for a program, it can search up to four
separate drives before it gives up its search and reports the
equivalent of a "file not found error".  This sequence is called
the "drive search chain".  In the DEC, MAY and MAY-VT  versions,
the drive search chain parameters are located at $1268 to 126b,
while for the AUG  version, the search chain is at $0e68 to 0e6b. 
In all cases, the default version of CP/M contains the chain: 00
ff ff ff  which corresponds to searching the currently logged
drive only.

To set the search chain, the following byte values are used:

00 = default or currently logged drive
01 = drive A:
02 = drive B: 
(... etc)
10 = drive P:
ff = filler

For example, if the search chain was set to:

      00 0d 01 02

and you typed in a transient command such as PIP, CP/M would
search the default drive for the corresponding file (PIP.COM). 
If it was not found on this drive, CP/M would then try drive M:. 
If it was still not found, drive A: would be tried next, then
drive B:.  If it was still not found after the complete search,
CP/M would report back with a file not found error.  If one of
those drives was also the default, it would not be searched
again.

THE DEFAULT DRIVE AND USER AREA

After CP/M boots up, control is passed to the user via the
Console Command Processor (CCP.COM) which awaits for your
command.  The CCP prompt takes the form of "{user number}{drive
letter}>" (such as 3M>), where {user number} and {drive letter}
represent the "currently logged" user area (3 in this case) and
disk drive (M: in this case).  When you first boot up, this is
normally set to user area 0 on drive A:, giving the familiar "A>"
prompt.  In some cases, such as when you use one disk drive to
boot from, but store most of your programs on a different drive,
you may wish to change this default setting to avoid having to
change the drive assignment explicitly each time you boot up.  

The default drive on a cold boot is controlled by the byte at
$122f for the DEC, MAY and MAY-VT versions and at $0e2f for the
AUG  version.  The value of this byte is 0 for drive A:, 1 for
drive B:, etc up to f for drive P:.  (This byte, which ends up at
offset $13 of the system control block (SCB), is also used by the
CCP during the warm boot routine for establishing the default
drive after exiting from a transient program.   The value at this
location is updated each time you explicitly set the drive from
the CCP by issuing a <drive letter>: <return> command.  This
patch only sets the initial value used after a cold boot.)

The default user area on a cold boot is controlled by the byte at
$1230 for the DEC , MAY, and MAY-VT versions and at $0e30 for the
AUG version.  The value of this byte ranges from 0 for user area
0 to f for user area 15.  It ends up at offset $14 of the SCB and
is also used by the CCP during a warm boot.

EXTENDED 1581 SUPPORT

In volume 8, issue 03 of Transactor  (November 1987), I presented
a patch for the AUG  and DEC versions of C-128 CP/M that would
allow full use of the capacity of the 1581 drive.  As I mentioned
at the time, my 1581 disk format would not be compatible with the
"official" Commodore version (i.e. the MAY CP/M release).  Since
some of you may have obtained the MAY CP/M release since making
my initial patch, you may be wondering how to access the 1581
disks made with my version.  Fear not,  the next patch allows the
MAY and MAY-VT  versions to read and write these early 1581
disks, in addition to the "official" 1581 disks.   (The patch
points are also given for the AUG and DEC  versions for the
benefit of those who missed them the first time around.)  Change
the listed bytes to the "new byte value" to complete the patch. 
This patch fiddles with the disk parameter table entries for the
EPSON QX-10 disk type (10 x 512 sectors), so you will lose
compatibility with this type, but gain an 800k disk instead.

           ADDRESS                  New Byte Value
-------------------------------------------------------------
AUG   DEC   MAY   MAY-VT

1404  2165  1f08  1f39                    00
1405  2166  1f09  1f3a                    86
1406  2167  1f0a  1f3b                    01
1412  2173  1f16  1f47                    "MG 1581    (enter as text
                                                      string)

DEFAULT TERMINAL EMULATION

When the MAY-VT version boots up, you are normally in ADM-31
emulation mode.  You can change the default to VT-100 mode by
changing the following bytes, starting at address 303E:

Location    New Value

303E        0                 (terminate sign-on message)
303F        CD                (CALL  SETVT100)
3040        0E
3041        CB

This patch works on the basis of using a part of the sign-on
message to add a CALL to the routine for setting the emulation
mode to VT-100.  This is done AFTER the screen initialization and
sign-on message, which is configured to work under ADM-31 mode. 
The new zero byte signifies an end of message; while the other
three bytes are the call instruction.  This reduces the number of
bytes available for custom sign-on message.  You may want to
include a note in your sign-on message saying that VT-100 mode is
active.  NOTE: Programs configured to run under ADM-31 mode will
not give proper screen output in VT-100 mode because the screen
formatting control codes are totally different.

CORRECTING BUGS

This next patch cures a bug in the AUG  version which prevents
you from executing custom 8502 machine language routines from
within CP/M.  The error is at $5cab which ends up in the BIOS
8502 portion of the CP/M operating system.  Change this byte from
a $c3 to a $6c and you are off to the races with BIOS function
30, group 4, subfunction 9 "User call to 8502 Code Routine".  The
8502 code at this location should be JMP (FD05), but the $6c for
the JMP instruction was somehow scrambled into a $c3 by the cross
assembler used to create the routine.

COMMAND PROCESSOR

The resident command processor for C-128 CP/M is the CCP.COM
program.  This is the one which contains the internal CP/M
commands such as DIR, USER, TYPE, etc., and which is used to load
transient programs.  The CCP is loaded automatically during a
cold boot and remains resident until you do a cold boot.  When a
transient program is running, the CCP 'hides' in BANK 0 until it
is required again.

You can install your own custom command processor by either
deleting the CCP.COM file on your boot disk and re-naming your
custom processor as CCP.COM.  Another method is to change the
name of the file that CP/M looks for when it boots up.  This is
located at 0a95 to 0a9f on the AUG version and 0f6f to 0f79 on
the DEC, MAY and MAY-VT versions.  A standard CP/M eleven byte
parsed filename format is used with the name in uppercase ASCII,
left justified in the 8 byte main and 3 byte type fields, padded
with ASCII spaces.  The drive code from which the processor is to
be loaded is located at 0a94 on the AUG version and 0f6e on the
other versions.  This is normally set to a value of 1 which
corresponds to drive A:.  You can set this to some other value if
you wish:  0  = default drive, 1 = A:, 2 = B:, etc.

CLOSING UP

Now that you have completed all of the patch work on your system
disk, the last thing to do is to save a copy of it.  This is done
by SID's "w" command:

     wcpm+.sys,100,zzzz

where zzzz is the address that you copied down from SID's signon
screen at the beginning of the process.  To refresh your memory,
it should be 5d00 for the AUG  version, 6400 for the DEC 
version, 6300 for the MAY version, or 6500 for the MAY-VT
version.   After SID has re-written the file, it should display a
message similar to:

   yyyyh record(s) written

where yyyy has a value of 00B8 for the AUG  version, 00C6 for the
DEC  version,  00C4 for the MAY version, or 00C8 for the MAY-VT
version.   After you get this message, you can exit SID with a
<control>-C.  

To see the effect of your changes, you must do a cold system
reboot (i.e. with the modified CPM+.SYS disk in drive A:, press
<control>-<enter> or the reset button).  When CP/M comes back on,
your changes should be in force.   (If by some chance you have
made an error in the patches, and you cannot get CP/M to re-boot
or it does something unexpected, it is probably easier to start
with a fresh copy of the old unmodified CPM+.SYS file rather than
trying to fix your modified one.  It is also wise to wait a short
time before you copy your modified CP/M system to all of your
boot disks to check that you have not created any "hidden" bugs
by your patching attempts.)

At first glance, this document may seem to suggest a formidable
task, especially for the novice CP/M programmer.  However, it is
fully recognized that not everyone will want to make all of the
changes mentioned above but a combination of a few of them can
add some nice custom touches to your CP/M environment.  In
addition, there are probably many more changes that could be made
in the form of patches.  I leave these to other readers to figure
out.  

CCP.COM

AUTO BOOTING

There are two ways to auto boot applications programs, utilities,
games, etc. on the C-128 in CP/M mode.  The first is a fairly
well documented feature using a special SUBMIT file.  Each time
CP/M is started up, it looks for a file named "PROFILE.SUB" on
the default drive.  This is a regular CP/M submit file which is
automatically executed on start up, similar to the IBM-PC-DOS
"AUTOEXEC.BAT" file.  Unlike the IBM version, however,
PROFILE.SUB requires that you have the utility "SUBMIT.COM" on
the same disk.  This utility reads the statements in the SUBMIT
file (standard CP/M commands or program names such as DIR or PIP
etc.) and translates them into its own executable form.  The
commands are not executed immediately, but are written to a
temporary file called "SYSIN.$$$".  When all commands have been
translated and written to this file, the file is read and they
are executed.  This brings out two limitations of the PROFILE.SUB
method of auto booting.  Because a temporary file is written to
the disk, you cannot cover the write protect notch.  The method
is also quite slow, especially with a 1541 drive, because it
involves reading and writing a number of disk files.  In
addition, since the PROFILE.SUB file is written in standard ASCII
format, it is very susceptible to prying eyes.  All it takes is a
"TYPE PROFILE.SUB" command for some one to sneak a peak at your
secret boot routine.  Despite these limitations, you can do a
very complicated set of start up procedures using this method.

The second method is not well known at all, even to confirmed
hackers who have been using other CP/M machines for years. 
Although not quite as simple as using the PROFILE.SUB file, the
method allows you to cover the write protect notch.  In addition,
you do not need any other files on the disk other than the one
you want to boot.  It is also much faster, because it does not
have to read and execute the SUBMIT.COM program before executing
the boot.  The nature of the technique limits you to a single
CP/M command in the boot statement, but this is sufficient to
start up most programs.  The technique involves changing a few
bytes in the CP/M Console Command Processor (CCP.COM) file. 
(Because you are changing the system files, never do this on your
original disks!  Always work with a backup copy.  The CCP is the
part of the CP/M system which reads and interprets commands typed
in at the console.  It contains the code for accessing most of
the built in CP/M commands, such as DIR, TYPE, etc.  It also
loads and transfers execution to transient program files. 
Control of the system is passed to CCP.COM after boot up and
after each command or transient program has finished executing).

Using  SID,   load in the file with the command:

            SID  CCP.COM  <return>

      SID will respond with:

      NEXT    MSIZE     PC    END
      0d80     0d80     0100  d2ff
      #

Addresses $04fc to $0503 contain the word "PROFILE".  You can
change this to your application program name using SID's 's'
command.   For example, to start up MBASIC example, you would
use:
    
      you type     s04fc <return>
      SID responds 04fc 50 -
      you type     "MBASIC <space> <return>
      SID responds 0503 2e -
      you type     . <return>
      SID responds #

The total length of the string must be seven characters so pad
the end of the filename with spaces.  

Internal Command Names

The CCP has a number of built in commands such as DIR, TYPE, etc. 
The command names are stored in a table at 0637 of the CCP.COM
file.   The text is in ASCII uppercase, with each name at least
three characters long and subsequent names separated by one ASCII
space ($20 or 32 dec.).  The default command string is:

DIR TYPE ERASE RENAME DIRSYS USER

You can change the names by which the CCP recognizes these
commands by changing the ASCII text string.  The length of each
name does not have to be the same as the original, but the total
length cannot exceed 33 (decimal) bytes.   An example of a
modified string is:

CAT LIST DELETE NAME SYSTEM CHDIR

In this case, CAT gives the disk directory, LIST will display a
file on the screen, etc.

Once you have made all of the necessary changes, save the
modified file back to disk with the command:

            wccp.com,0100,0d80 <return>

The hex addresses listed above are identical for all current
versions of CP/M implemented on the C-128 because they all use
the same version of the CCP.

Now press the reset button and watch your chosen program boot up
automatically from a cold boot.  Of course, only one boot routine
per disk is possible with this method.  If you format a new disk
and copy the modified system files to it,  the boot command will
be totally transparent if the bootable file is not present on the
new disk.  This means that if the file mentioned in the boot
routine is not present  on the disk, CP/M will start up in its
normal manner and end with the familiar A> prompt.  Also note
that this method cannot be used in with a PROFILE.SUB start up
file because it de-activates this feature.

ADDING VT-100 SUPPORT

The MAY CP/M release comes with an option to add support for VT-
100 terminal emulation.  This is another semi-standard CP/M
terminal protocol which is totally different from the normal C-
128 CP/M ADM-31 emulation in its control codes.

In order to add VT-100 support, you will need to re-assemble and
re-construct the CPM+.SYS file from the source code files
contained in USER area 1 of the MAY CP/M boot disk.  (Note that
this disk is supplied in 3-1/2 inch format for use with a 1581,
but you can still  use VT-100 emulation if you do not have a
1581.  However, you must have access to a 1581 temporarily in
order to copy the source code files onto a 5-1/4 inch disk.)  

Start the process by formatting a work disk and copying all of
the source code files from USER area 1 of the MAY boot disk onto
it.  Because of the size of the files and the resulting output,
you will need at least a 1571 double sided disk.  The 1750 RAM
disk is also suitable and will be faster because of the numerous
disk accesses required by the various assembly processes.  You
will also need to copy the files MAC.COM, RMAC.COM, LINK.COM,
SUBMIT.COM, ADDBIOS.COM, and GENCPM.COM from USER area 0 of the
MAY boot disk.  Do not add any extra files because space is very
tight, especially with a 1571 disk and the process will crash if
inadequate disk space exists.
Once the files have been copied,  edit the file CXEQU.LIB with
your favorite text editor.  Near the beginning of the file, you
will see a line which looks like:

      use$vt100   equ   false

      Change this to read:

      use$vt100   equ   true

and save the modified file under the same name.

Once this minor change has been made, the creation of the new
CPM+.SYS file is automatic.  All you have to do is type in:

      SUBMIT CZ  <return>

and the SUBMIT utility takes over from there.  It may prompt you
to erase certain files when it has finished with them.  Just
answer 'y' for yes to each prompt because the files are all
temporary working files which are no longer required but take up
valuable disk space.  Be patient, because the process can be
fairly long (a half hour or more).  With a RAM disk, there is no
indication that anything is happening apart from a few widely
spaced messages on the screen.  With a disk drive, activity
should be more easily recognizable with constant disk accesses.

Once VT-100 emulation has been added to your system, you can
select VT-100 mode by pressing the <control> key with the <plus>
key on the numeric keypad.  To select ADM-31 mode, press
<control> with the <minus> key on the numeric keypad.

CPM7.TXT rev 1a 96-11-01
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      THIS DOCUMENT IS COPYRIGHT (C) 1988, 1996 BY HERNE DATA
      SYSTEMS LTD.  THE MATERIAL CONTAINED HEREIN MAY BE FREELY
      USED FOR PERSONAL INFORMATION ONLY.  IF YOU REPRODUCE IT,
      THIS COPYRIGHT NOTICE MUST NOT BE REMOVED.  THIS MATERIAL
      MAY NOT BE EXPLOITED FOR COMMERCIAL PURPOSES.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Herne Data Systems Ltd., 
PO Box 250, Tiverton, ON N0G 2T0 CANADA.  
Voice/fax 519-366-2732, 
e-mail herne@herne.com
internet: http://www.herne.com

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

C-128 CP/M Memory Map
=====================

The memory map of the C-128 is complicated to say the least.  It
is even more complicated in CP/M mode because the CP/M operating
system is largely RAM based and, thus, the memory map changes
with the CP/M version number and with operating system
enhancements, modifications, etc..  This document presents a map
of the memory configurations used in CP/M mode.  It is not
claimed to be complete, but is a very useful starting point for
your own explorations.  The map was compiled by painstakingly
cross checking the CP/M system source code files against the
various memory areas using various memory dumping tools (some
specially written for this project).  The labels for the various
memory locations are taken from the CP/M system source code
files.
        
There are currently four official versions of C-128 CP/M
generally available (apart from various beta test versions), as
denoted by the dates displayed on boot up or by pressing the <F8>
key.  There are some major differences in the memory maps of each
version.  For clarity, these are defined here as:

     AUG  =  Version dated  1 Aug 85    
     DEC  =  Versions dated 6 Dec 85 or 8 Dec 85
     MAY  =  Version dated 28 May 87

A fifth version can be derived from the MAY version by re-
assembling the source code files with the VT-100 emulation option
enabled.  (For a full description of how to do this, see the
section in the Customizing C-128 CP/M document entitled 'Adding
VT-100 Support'.)   In this map it will be referred to as MAY-VT
where there is a difference between it and the regular MAY
version.   Where not specifically noted, it the same as the MAY
version.

It is recognized that there are many 'unofficial' or heavily
customized versions of CP/M for the C-128 which various people
have created.  In these cases, generally only the BANK 0 ROM;
keyboard definition and parameter storage areas in low BANK 0
memory; the BANK 1 zero page; I/O register areas; and the high
common RAM parameter areas will be unchanged.  Fortunately, most
of the other important system areas can be found easily by
tracing the documented vectors in the BANK 1 zero page and the
FDxx memory areas.

There are also significant differences in the memory map
depending on which processor is currently in use (the Z-80 or
8502) .  This is important even in CP/M mode because most of the
low level BIOS routines, such as standard serial port operations
(some disk operations and all printer output), RAM disk
operations, etc. use the 8502 mode.

Z-80 operations

BANK 0 :    MMU configuration register value $3F, or preconfig
            register #1 (FF01)

BANK 0 is the system bank.  The CP/M ROM's, BIOS and BDOS operate
primarily in this bank.  Calls can be made by transient programs
via the Bank 0/1 common memory portion above E000.

0000 to 0FFF      Z-80 ROM code     (This code must be moved to bank 1
                                    to be examined.)  The entry points
                                    are as follows:

Z-80 Restart  (RST) routines:

0000              RST 0       COLD BOOT routine which takes over when
                              the C-128 is first powered up or the
                              reset button is pushed.  The routine
                              continues at 003B.
0008              RST 1       CP/M BOOT routine which is responsible
                              for loading the CPM+.SYS file. 
                              Continues at 018C.
0010              RST 2       Entry point for executing main Z-80 ROM
                              functions.  Continues with RST 4.
0018              RST 3       Entry point for executing main Z-80 ROM
                              functions.  Continues with RST 5.
0020              RST 4       Continuation of RST 2.  Adjusts address
                              vector lo byte then falls through to RST
                              5.
0028              RST 5       Get ROM function address from vector
                              table and execute.
0030              RST 6       Used to indicate ROM date.  Contains
                              ASCII text of: 05/12/85
0038              RST 7       Jump to interrupt handler at FDFD.

003B              Continue with COLD BOOT, set VIC speed to 1 MHz,
                  test for mode, /EXROM, /GAME, etc.

0054              Go to C-64 mode.

00B4              Part of CP/M boot code.  Locate 'CPM+.SYS' file in
                  CP/M directory and load if found.

00ED              Filename to look for on cold boot: 
                        BYT 0  'CPM+    SYS' 0

0100              ROM function execution address vector table for
                  RST 4 and RST 5.  Each is 2 bytes long in lo/hi
                  format.  Note that separate routines are provided
                  for the 40 and 80 column screens.

      ROM function#           Points to   Purpose
0100        0                 0684        write character in .D to 80
                                          col screen and advance cursor.
0102        2                 096E        40 col
0104        4                 06AB        set 80 col cursor position 
                                          .D = line, .E = column
0106        6                 09BC        40 col
0108        8                 06C2        move 80 col cursor up one line
010A        A                 09DD        40 col
010C        C                 06D1        move 80 col cursor down one
                                          line
010E        E                 09F1        40 col
0110        10                06DD        move 80 col cursor left one
                                          col
0112        12                0A31        40 col
0114        14                06E8        move 80 col cursor right one
                                          col
0116        16                0A3C        40 col
0118        18                06F1        do a carriage return (go to
                                          col 0) on 80 col
011A        1A                0A45        40 col
011C        1C                077A        erase to end of line, 80 col
011E        1E                0A48        40 col
0120        20                0780        erase to end of screen, 80 col
0122        22                0A62        40 col
0124        24                0791        insert a char, 80 col
0126        26                0A8E        40 col
0128        28                07CA        erase a char, 80 col
012A        2A                0ABA        40 col
012C        2C                07DC        insert a line, 80 col
012E        2E                0ADF        40 col
0130        30                081E        erase a line, 80 col
0132        32                0B2D        40 col
0134        34                071B        set character color, 80 col
0136        36                0B7B        40 col
0138        38                0710        set character attribute, 80
                                          col
013A        3A                0B62        40 col
013C        3C                091C        get character and attribute,
                                          80 col
013E        3E                0995        40 col
0140        40                0927        output char and attribute, 80
                                          col
0142        42                09A2        40 col
0144        44                074E        get character, background and
                                          border colors and current
                                          attribute, 80 col
0146        46                0BAE        40 col
0148        48                00EB        (not used: code at EB is XOR A
                                          : RET)
014A        4A                00EB        (not used)
014C        4C                00EB        (not used)
014E        4E                00EB        (not used)
0150        50                03E3        convert GCR logical track# in
                                          @TRK to physical track and
                                          sector in VICTRK and VICSEC.
0152         52               046B        check GCR disk type SS or DS,
                                          C-128 CP/M (CBM boot code
                                          present) or C-64 CP/M.
0154        54                0CFA        output a sound from SID chip.
0156        56                00EB        (not used)
0158        58                00EB        (not used)
015A        5A                00EB        (not used)
015C        5C                00EB        (not used)
015E        5E                00EB        (not used)
0160        60                0C3C        get logical position of cursor
                                          on physical 80 col screen for
                                          pseudo 80 col mapping.
0162        62                0C4A        set logical position of cursor
                                          on pseudo 80 col screen.
0164        64                0BCF        copy line from 80 col pseudo
                                          screen to physical 40 col
                                          screen.
0166        66                0C0C        copy 40 col window from pseudo
                                          80 col screen to 40 col screen
                                          RAM.
0168        68                0526        print message from pointer on
                                          top of stack, ending in 0 byte
                                          to both 40 and 80 col screens
                                          (used during boot).
016A        6A                0532        print message from pointer in
                                          .DE, ending with '$' to both
                                          40 col and 80 col screens.
016C        6C                052C        print XOR encrypted message
                                          from pointer in .HL, ending
                                          with '$' to both 40 col and 80
                                          col screens.(used for disk
                                          status message?)
016E        6E                00EB        (not used)
0170        70                0C7F        convert ASCII to screen code
                                          for 40 col display.
0172        72                0CC2        set 40 col cursor position in
                                          80 col pseudo screen.
0174        74                0CC7        set 80 col cursor position in
                                          video RAM.
0176        76                0CE4        look up physical color in
                                          logical color table.
0178        78                00EB        (not used)
017A        7A                083D        do a block fill on 80 col
                                          video RAM.
017C        7C                08AE        do a block move on 80 col
                                          video RAM.
017E        7E                0660        copy character set to 80 col
                                          video RAM.

0180              JUMP to 090A      (screen character and attribute
                                    print routine)
0183              JUMP to 0933      (get 80 col character and
                                    attribute)
0186              JUMP to 0953      (set 80 col update address)
0189              JUMP to 0945      (wait for 80 col update status)

Continuation of ROM routines.  (Note: routines described above in
the vector table have been omitted for brevity.)

018C              Continuation of RST 1 (CP/M cold boot)

02D2              Read boot sector (track 1, sector 0)

0324              Load CPM+.SYS records from disk

03E3              Convert block number to physical track and sector

046B              Check boot sector for 'CBM'

0480              Error handling for bad CPM+.SYS file
058C              Print disk status message on line 25

05A6              Convert decimal number in .A to ASCII digits, and
                  print it
05B5              Print character in .A

05BD              Install character set in 80 col RAM

0C7F              Set up 40 col character set

0D1A              8502 code used in the C-128 reset procedure (moved
                  to BANK 0 RAM at 1100)

0D22              more 8502 code for various low level serial bus
                  procedures used during boot up.  Moved to BANK 0
                  RAM at 3000, but eventually replaced by BIOS
                  routines, then overwritten by the CCP.

0EE5              8502 code copied to FFD0 for switching on the Z-
                  80.

0EF5              Z-80 code copied to FFE0 for switching on the
                  8502.

0F0A              Decoding table used to convert physical color
                  codes into RGBI color codes

0F1A              80 col char. bit map for: ASCII 92 ( \ back slash)
0F22                          ASCII 94    ( ^ caret)
0F2A                          ASCII 95    ( _ underscore)
0F32                          ASCII 96    ( ` reverse apostrophe)
0F3A                          ASCII 123   ( { left brace)
0F42                          ASCII 124   ( | pipe)
0F4A                          ASCII 125   ( } right brace)
0F52                          ASCII 126   ( ~ tilde)
0F5A                          ASCII 255 
0F62        80 col char bit maps for 9 other various misc chars.              

The following values are written to the MMU registers at D500 to
D50A during boot up:

0FAA        Initial MMU configuration register (D500) value for
            cold boot: 0D = Bank 0 RAM + BASIC LO ROM + CHAR ROM +
            KERNAL ROM
0FAB        MMU preconfiguration register (D501 to D504) values
            used during initialization of CP/M mode:  3F, 7F, 3E,
            7E
0FAF        MMU mode configuration register (D505) initial value =
            B0
0FB0        RAM configuration register (D506) initial value = 0B
0FB1        Page 0 pointer lo/hi (D507-D508) initial values = 00 00
0FB3        Page 1 pointer lo/hi (D509-D50A) initial values = 01 00

0FB5        sector skew table for C-128 native CP/M GCR disks, 21
            sectors/track region   
0FCA        19 sectors/track region
0FDD        18 sectors/track region
0FEF        17 sectors/track region

Keyboard Tables

1000 to 128F      SYSKEYAREA        String data for programmable
                                    function keys. Each key can be
                                    defined as a string. Definitions
                                    "float" (i.e. you do not have to
                                    adjust any pointers elsewhere) and
                                    are terminated by a zero byte. 
                                    Vector at FD0B points to this
                                    table.  The default key definitions
                                    are given in the document "The
                                    Console." 10B0 to 128F is not used
                                    with the default function key
                                    definition set.  It is full of
                                    FF's, but can be used for stashing
                                    short temporary routines.

1290 to 13EF      KEYCODES          ASCII codes for each key, 4 values
                                    for each key (normal, "alpha mode",
                                    shift and control) arranged
                                    according to key scan code.  Note
                                    that "alpha mode" defaults to
                                    uppercase and is toggled on and off
                                    by pressing the C= logo key.  It is
                                    equivalent to a software "caps
                                    lock", but is not related to either
                                    the hardware <caps lock> or <shift
                                    lock> keys.  The vector at FD09
                                    points to 1290.  The default key
                                    assignments are given in "The
                                    Console".  The key code values are
                                    as follows:
             
                              Value             Meaning
                              0                 null (equivalent to no
                                                key press)

                              1 to 7F           normal ASCII codes
                                                (control codes, letters,
                                                numbers, symbols, etc)

                              80 to 9F          key has been programmed
                                                as a string, which is
                                                defined in SYSKEYAREA (32
                                                possible "programmable"
                                                keys)
                                    
                              A0 to AF          80 col character color
                                                (<ctrl> with number keys
                                                on main keyboard)
                                    
                              B0 to BF          80 col background color
                                                (<ctrl> with number keys
                                                on numeric keypad)

                              C0 to CF          40 col character color

                              D0 to DF          40 col background color

                              E0 to EF          40 col border color

                              F0                toggle disk status line
                                                on/off (<ctrl>-
                                                <run/stop>)

                              F1                system pause (<no-scroll>
                                                key)

                              F2                track cursor on 40 col
                                                screen (<ctrl>-<no-
                                                scroll>)

                              F3                move 40 col screen window
                                                left 1 char (<ctrl>-
                                                <cursor left> on the
                                                cursor keypad above the
                                                main keyboard is defined
                                                as 4  F3's)

                              F4                move 40 col screen win 
                                                right 1 char (<ctrl>-
                                                <cursor right> on the
                                                cursor keypad above the
                                                main keyboard is defined
                                                as 4  F4's)

                              F5                unlock all locked MFM
                                                disk types  (<ctrl>-
                                                <home>)

                              F6                select ADM31 screen
                                                emulation mode (<ctrl>-
                                                <minus> on numeric
                                                keypad) (MAY-VT version
                                                only. Note: the toggle is
                                                not implemented in the
                                                standard issue system
                                                file, but is available as
                                                an option when re-
                                                assembling the source
                                                code.)

                              F7                select VT100 screen
                                                emulation mode (<ctrl>-
                                                <plus> on numeric keypad)
                                                (MAY-VT version only,
                                                note: VT-100 is not
                                                implemented in the
                                                standard issue system
                                                file, but is available as
                                                an option when re-
                                                assembling the source
                                                code.)

                              F8 to FE          not currently defined
                                                (reserved for future
                                                expansion)

                              FF                do a system cold re-start
                                                (<control>-<enter>)

Notes:      (1)  when bit 7 of FD22 (STATENABLE) is on, key codes
            of $80 and greater are returned to the calling program
            without executing the special function as outlined
            above.
  
            (2)  FD4C contains a vector to the address of the table
            of 16 bit execution addresses (low byte/high byte
            format) of key codes F0 to FF.  This vector, or the
            individual vectors in the address table, can be changed
            to point  to your own custom code.

13F0 to 13FF      COLORTBL          logical color values 00, 11, 22,
                                    ... FF for use with <esc-esc-esc>
                                    printing and A0 to EF key color
                                    values. The vector at FD0D points
                                    here.  The low nibble at position
                                    13F0+z (0x) is the physical color
                                    assigned to the 80 column logical
                                    color z.  The high nibble is the
                                    physical color for the 40 column
                                    logical color z.

1400 to 1BCF      SCREEN40          pseudo 80 column screen character
                                    buffer for the 40 column screen

1C00 to 23CF      COLOR40           pseudo 80 column screen color
                                    buffer for 40 column screen

2400              BANKPARMBLK       (misc. system parameters and flags)

Terminal Emulation Parameters

40 Column:
2402              CUROFFSET         position counters used by psuedo 80
                                    col screen
2404              OLDOFFSET         for 40 col screen
2405              PRTFLG            XOR mask value for printing 'coded'
                                    messages
2406              FLASHPOS          cursor address in actual 40 col
                                    screen RAM
2408              PAINTSIZE         number of rows to move over for 40
                                    col screen shift ($18 or $19)
2409              CHARADR40         pointer to current char in pseudo
                                    screen RAM
240B              CHARCOL40         40 col character position - column  
                                          0-79
240C              CHARROW40         - screen row      0-24
240D              ATTR40            40 col attribute  (character color)
240E              BGCOLOR40         background color
240F              BDCOLOR40         border color
2410              REV40             reverse video flag

80 Column:
2411              CHARADR           pointer to current char in 80 col
                                    RAM
2413              CHARCOL           80 col character position - column  
                                          0-79
2414              CHARROW                 - screen row      
                                          0-24
2415              CURRENTATR        80 col attribute
                                       bit 7:  0 =    alternate (block
                                                      graphics) char set
                                               1 =    ASCII character set
                                           6:  0 =    normal video
                                               1 =    reverse video 
                                           5:  0 =    no underline 
                                               1 =    underline
                                           4:  0 =    no blink
                                               1 =    blink
                                           3:  1 =    red on
                                           2:  1 =    green on 
                                           1:  1 =    blue on
                                           0:  1 =    intensity on

2416              BGCOLOR80         background color
2417              CHARCOLOR80       character color

2418              PARMBASE          pointer to currently active
                                    parameter set (40 or 80 col)
241A              PARMAREA80        pointer to 80 col parameters
                                    ($2411)
241D              PARMAREA40        pointer to 40 col parameters
                                    ($2402)
2420              BUFFER80COL       temporary storage for 80 col video
                                    routines
2471              KEYBUF            temporary storage buffer for
                                    currently pressed key code
2488              CONTROL CODES     flag for control/shift keys
                                    pressed, and current character
                                    mode.
                                    bit         key pressed
                                    7                 left shift key
                                    5                 C= key
                                    4                 right shift key
                                    2                 control key

                         bit              1   0       character mode

                                          0   0       lower case
                                          0   1       alpha mode
                                          1   0       shift
                                          1   1       control
2489              MSGPTR            pointer to current function key
                                    message string
248B              OFFSET            cursor pointers used by various
                                    screen functions
248C              CURPOS            printing routines

248E              SYSFREQ           power line frequency : 
                                          0 = 60 Hz, FF = 50 Hz

2500 to 25FF      (unused)          this is a nice spot to hide some
                                    Bank 0 custom code.

2600 to 2A3F      BIOS8502          8502 BIOS code (see map of 8502
                                    mode below for description)

2A40 to 2BFF      (unused)          another nice place to stash custom
                                    code.      

2C00 to 2FFF      VICSCREEN         40 column video RAM, also appears
                                    in hardware I/O area and Bank 2. 
                                    (Note this is separate from normal
                                    C-128 40 col video RAM at $0400
                                    which is unused in CP/M mode
                                    because it is under the Z-80 ROM.)

3000  to 3CFF     CCPBUFFER         An image of the CCP.COM hides here
                                    during transient program execution
                                    so that it can re-load instantly on
                                    a warm boot when the transient
                                    program is finished.

Note:       3C00 to 3CFF is also used during a cold boot as
            follows:
3C00              BOOTPARM          various flags etc used during cold
                                    boot
3C02              LDBLKPTR
3C04              BLKUNLDPTR
3C06              BLOCKSIZE
3C07              BLOCKEND
3C09              BLOCKPTRS
3C29              INFOBUFFER
3C35              EXTNUM
3C36              RETRY
3C77              BOOTSTACK

3D00              BANK0FREE         BANK 0 free space which can be used
                                    by transient programs, if properly
                                    addressed.  It extends to 98FF on
                                    DEC and MAY  versions, 97FF on MAY-
                                    VT version, and 9BFF on AUG
                                    version.  Areas above about 6000
                                    are primarily used by CP/M as
                                    temporary directory and file
                                    buffers and buffer control blocks
                                    (BCB's).  Programmers can use, but
                                    beware of implications, especially
                                    during file I/O.

Operating system areas:

Component               AUG         DEC         MAY         MAY-VT            

Bank BDOS               9C00        9900        9900        9800  
Resident BDOS           EE00        EA00        EA00        EA00
Bank BIOS               CA00        C700        C800        C600
Resident BIOS           F400        F000        F000        F000

The 'Bank' portions are accessible in BANK 0 only, while the
'Resident' portions are accessible in either BANK 0 or BANK 1.

The MFM disk parameter table (DPT) is located at:
                  D876 to DA75 in the  AUG version
                  D6BD to D8BC in the DEC versions
                  D860 to DA5F in the MAY version
                  D891 to DA90 in the MAY-VT version

The DPT contains the basic information to allow access to foreign
MFM disk types.  Its structure is described in detail in the
document 'The Disk System'.    In all versions of C-128 CP/M, the
base address for the DPT can be found directly by the pointer at
FD46.

The other major component of accessing disk drives is the
extended disk parameter header or XDPH.  This is the working area
used by the BDOS for actual disk access.  When a disk is logged
in, the appropriate values are copied from the DPT to the XDPH
for general use.  The drive table address which contains the
vectors to the XDPH for each logical drive can be found at
BIOS_BASE+D7.  (This is not  a documented vector location,
however, but merely a point in the BIOS DRVTBL routine which
happens to contain the address.  The correct method to get the
drive table address is to use the BIOS DRVTBL function call
directly.)   The DRVTBL is located at:

CP/M Version                  DRVTBL Location

      AUG               FB78
      DEC/MAY           FBD1

The DRVTBL contains a series of address pointers to the disk
parameter header base address (DPH_BASE) for each logical drive
(A: to P:).  If a drive is not physically supported (drives F: to
L: and N: to P:, and M:, when no RAM expander is present),  the
drive table vector value is 0000.  The default DRVTBL vectors
are:  

                  Vector points to:
Drive             AUG         DEC/MAY
A:                FA6E        FA82  
B:                FAA5        FAB9  
C:                FADC        FAF0  
D:                FB13        FB27  
E:                FB4A        FB5E  
F: to L:                NOT USED    
M:                NOT USED    FB96  
N: to P:                NOT USED    

For each drive the $37 byte long XDPH has the following format:

DPH_BASE-A        pointer to the sector write routine for this drive
DPH_BASE-8        pointer to the sector read routine for this drive
DPH_BASE-6        pointer to the login routine for this drive
DPH_BASE-4        pointer to the initialization routine for this
                  drive
DPH_BASE-2        physical drive assigned to the logical drive
                  according to values listed below under VICDRV.
DPH_BASE-1        secondary disk type byte from byte 2 of DPT entry.
DPH_BASE          pointer to logical to physical sector skew table
                  (0000 if none)
DPH_BASE+2        9 bytes of scratch pad for use by BDOS
DPH_BASE+B        media flag 0 if disk logged in, FF if disk has
                  been changed
DPH_BASE+C        pointer to DPB values for this drive (contained
                  later in entry)
DPH_BASE+E        pointer to CSV scratch pad area (used to detect
                  changed disks)
DPH_BASE+10       pointer to ALV scratch pad area (used to keep
                  track of drive storage capacity)
DPH_BASE+12       pointer to directory buffer control block (BCB)
DPH_BASE+14       pointer to data BCB
DPH_BASE+16       pointer to the directory hashing table
DPH_BASE+18       bank for hash table
DPH_BASE+19       DPT entry for this drive
DPH_BASE+2A       maximum sector number and MFM lock flag (bit 7 on
                  if locked)
DPH_BASE+2B       pointer to entry in master MFM DPT table

E000              Common_Free       Free memory common to both BANK 0
                                    and 1.  Normally used by RSX
                                    (resident system extension)
                                    programs, as well as other
                                    operating system shells and
                                    extensions, and self re-locating
                                    utilities such as SID, SUBMIT,
                                    SAVE, GET, PUT, etc.  Can be used
                                    by experienced  programmers if you
                                    are aware of consequences, such as
                                    possible crash when using another
                                    program or RSX that also resides in
                                    this area.  Extends to E9FF in DEC
                                    and MAY versions and  EDFF in AUG
                                    version

System Control Block (SCB):

The SCB is a temporary flag and storage area used for
communication amongst transient programs, the BIOS, BDOS and CCP. 
It is $64 (dec. 100) bytes long , located immediately before BIOS
jump table, (DEC and MAY Versions EF9C to EFFF;  AUG Version 
F39C to F3FF) can be read or written with BDOS function 49.  
Absolute*   Byte Offset**           Function
Address           (from start of SCB)

xx9C        00 - 04                 reserved for various system flags+
xxA1        05                      BDOS version number  (hex 31)
xxA2        06 - 09                 reserved for user determined flags
                                    (put your own stuff here)
xxA6        0A - 0F                 reserved for system use+
xxAC        10 - 11                 16 bit program return code for
                                    passing data to chained programs
xxAE        12                      reserved for system use+
xxAF        13                      default drive to return to after
                                    completion of transient program. 
                                    (0 = A:, 1 = B:, etc.)  The CCP
                                    looks here during a cold or warm
                                    start.
xxB0        14                      default user area for cold or warm
                                    start (0 to F).
xxB1        15 - 17                 reserved for system use+
xxB4        18                      CCP program mode as set by the
                                    SETDEF utility:
                              Bit   1     0     (filename name display)
                                    0     0     do not display parsed
                                                program name after
                                                entering on command line
                                    1     1     display parsed program
                                                name after entry on
                                                command line

                              Bit   4     3     (file search order)
                                    0     0     only look to execute .COM
                                                files (default)
                                    1     0     look for .SUB type files
                                                first, then .COM files if
                                                no .SUB file.  Do not
                                                need to explicitly
                                                specify SUBMIT to access
                                                .SUB files.  (eg. to
                                                execute the file TEST.SUB
                                                you can type in TEST
                                                instead of SUBMIT  
                                                TEST.)
                                    0     1     look for .COM then .SUB

xxB5        19                      reserved for system use+
xxB6        1A                      screen width - 1   (set to 79)
xxB7        1B                      current column position on screen
                                    (0 to 79)
xxB8        1C                      screen page length (24 lines per
                                    screen)
xxB9        1D - 21                 reserved for system use+
xxBE        22 - 2B                 assignment vectors for CP/M's
                                    logical I/O devices.  16 bit value
                                    used as follows:

                  bit    device
                  f     KEYS        (input only)
                  e     80COL       (output only)
                  d     40COL       (output only)
                  c     PRT1        (device 4 serial printer, output
                                    only)
                  b     PRT2        (device 5 serial printer, output
                                    only)
                  a     6551        (not really supported, it was
                                    supposed to be on an                
                                    external card which was never
                                    produced)
                  9     RS232       (input or output)
                  8 to 0      not used

            If a bit is on, then the physical device is assigned to
            that logical device.  Each logical device can have more
            than one physical device assigned to it and each
            physical device can be assigned to more than one
            logical device.  Logical devices and their assignment
            vector locations are:

xxBE                          22 - 23           CONIN
xxC0                          24 - 25           CONOUT
xxC2                          26 - 27           AUXIN
xxC4                          28 - 29           AUXOUT
xxC6                          2A - 2B           LSTOUT  
 
xxC8        2C          Page mode         0 = display 1 page of data at
                                          a time
                                          1 = display continuously
                                          (this is the annoying flag
                                          that causes CP/M TYPE command
                                          to say "press return to
                                          continue" after each screenful
                                          of data.)
xxC9        2D          reserved for system use
xxCA        2E          determines effect of CTRL-H.              
                        0   = backspace and delete
                        FF  = delete and echo
                        Default 0.
xxCB        2F          determines effect of <delete>
                        0   = delete and echo
                        FF  = backspace and delete
                        Default FF.
xxCC        30 - 32     reserved for system use+
xxCF        33 - 34     16 bit console mode flag (default value =
                        0000):
                              bit         meaning
                              0           0 = return normal status for
                                          BDOS function 11
                                          1 = CTRL - C only status

                              1           0 = enable CTRL-S /CTRL-Q stop
                                          scroll/start scroll
                                          1 = disable stop/start scroll

                              2           0 = normal console output
                                          1 = raw console output,
                                          disables tab expansion, and
                                          CTRL-P printer echo

                              3           0 = enable CTRL-C program
                                          termination
                                          1 = disable CTRL-C

                              8 - 9       used for RSX's

xxD1        35 - 36           address of 128 byte scratch pad buffer,
                              points to EE6A on DEC and MAY, and F26A
                              on AUG.
xxD3        37                output string delimiter (normally $)
xxD4        38                LIST output flag        0 = console output
                                                      only
                                                      1 = echo output to
                                                      printer
xxD5        39                reserved for system use+
xxD6        3A - 3B           pointer to start of SCB (F39C on AUG or
                              EF9C on DEC and MAY) 
xxD8        3C - 3D           current DMA (disk buffer) address,
                              (default 0080)
xxDA        3E                current default drive (0 = A:, 1 = B:,
                              etc.), set with BDOS function 14, but
                              reset to value from SCB+13 when CCP
                              regains control after a warm start.
xxDB        3F - 40           BDOS disk info flags.  Contents vary
                              according to current BDOS function.  For
                              example: Pointer to actual keyboard
                              input scratch pad area  for BDOS console
                              input functions ; or if SCB offset
                              $41=$FF, then points to address of file
                              control block where an error occurred.
xxDD        41 - 42           FCB flag
xxDF        43                last BDOS function executed (usually
                              used to find out where an error occurred)
xxE0        44                current user number (0 to F), set with
                              BDOS function 32, but reset to value
                              from SCB+14 when ccp regains control
                              after a warm start.
xxE1        45 - 49           reserved for system use+
xxE6        4A                BDOS multi sector count for read/write
xxE7        4B                BDOS error mode:        FF = system does not
                                                      display 
                                                      error messages,
                                                      returns to current      
                                                      program
                                                      FE = display error
                                                      messages, return
                                                      to current program.
                                                      0 = terminate
                                                      current program on
                                                      error and display
                                                      message

xxE8        4C - 4F           Drive search chain: up to 4 drives can
                              be specified:
                                    0 = current default drive, 1 = A:,
                                    2 = B:, etc. If program or file is
                                    not found on specified drive, the
                                    search chain will be used and each
                                    drive in the list will be tried in
                                    sequence until it is found.  Unused
                                    spots filled with FF's.

xxEC        50                Temporary file drive: 0 = default, 1 =
                              A:, etc
xxED        51                Error drive: number of drive where last
                              I/O error was encountered (0 = default,
                              1 = A:, etc)

xxEE        52 - 53           reserved for system use+
xxF0        54                BIOS flag to indicate disk changed
xxF1        55 - 56           reserved for system use+
xxF3        57                BDOS flags: bit 7 set then system
                              displays expanded error messages                
                              (default is set)

xxF4        58 - 59           date in days in binary since 1 Jan 78
xxF6        5A                hour in BCD
xxF7        5B                minutes in BCD
xxF8        5C                seconds in BCD
xxF9        5D - 5E           start of common memory (E000)
xxFB        5F - 61           Jump to BDOS error handling routine (5F
                              is Z80 'JP' instruction, 60-61 is the
                              address according to:
                              AUG         9C7C
                              DEC         997C
                              MAY         9A7C
                              MAY-VT      987C
xxFE        62 - 63           top of user TPA  (from vector at 0006 -
                              0007: entry point to BDOS)

Notes:      *     for AUG version, xx = F3, while for DEC and MAY
                  versions, xx = EF.
            **    for use with BDOS function call 50.
            +     areas marked 'reserved for system use'
                  contain undocumented, unknown flags that are
                  used as temporary storage by a variety of
                  BDOS and BIOS routines.

BIOS Jump table:   

(BIOS_BASE=       F000 in DEC and MAY versions
                        F400 in AUG version)                     

(Note: the first byte of each group is a Z80 jump instruction to
the address contained in the next two bytes.)
                                                      BIOS Function number

BIOS_BASE+00            cold boot                                 0
BIOS_BASE+03            warm boot                                 1
BIOS_BASE+06            check CONSOLE input status                2
BIOS_BASE+09            read CONSOLE character                    3
BIOS_BASE+0C            write CONSOLE character                   4
BIOS_BASE+0F            write LIST character                      5     
BIOS_BASE+12            write AUXILIARY OUT character             6
BIOS_BASE+15            read AUXILIARY INPUT character            7
BIOS_BASE+18            move to track 0 on selected disk          8
BIOS_BASE+1B            select disk drive                         9
BIOS_BASE+1E            set track number                          10
BIOS_BASE+21            set sector number                         11
BIOS_BASE+24            set DMA address                           12
BIOS_BASE+27            read specified sector                     13
BIOS_BASE+2A            write specified sector                    14
BIOS_BASE+2D            check LIST status                         15
BIOS_BASE+30            translate logical to phys sector          16
BIOS_BASE+33            check CONSOLE output status               17
BIOS_BASE+36            check AUXILIARY INPUT status              18
BIOS_BASE+39            check AUXILIARY OUTPUT status             19
BIOS_BASE+3C            get address of character I/O table        20
BIOS_BASE+3F            initialize character I/O devices          21
BIOS_BASE+42            get address of disk drive table           22
BIOS_BASE+45            set# of log sectors to read/write         23
BIOS_BASE+48            force I/O buffer flush                    24
BIOS_BASE+4B            memory move                               25
BIOS_BASE+4E            get or set time                           26
BIOS_BASE+51            select memory bank                        27
BIOS_BASE+54            specify bank for DMA operation            28
BIOS_BASE+57            set buffer bank                           29
BIOS_BASE+5A            call user system functions                30

The following BIOS_BASE entries are not officially documented
vectors, but are merely part of BIOS routines which are located
at the same offset address for all versions of C-128 CP/M.  They
can be checked for quick access to the specified system
parameters, but cannot be relied upon in cases of customized CP/M
installations.

BIOS_BASE+D3 to +D4           16 bit pointer (lo/hi byte) to physical
                              device table.  This address is returned
                              by calling BIOS function 20.  (points to
                              F7FD in AUG version and F3E1 in DEC and
                              MAY)

DEVTBL = Physical device table, each entry is 8 bytes long
consisting of the following data:

 device name      (6 bytes, padded with spaces)
 mode byte        (1 byte)
 baud rate        (1 byte)

Mode byte flags*              device function

0000 0001                     device can do input
0000 0010                     device can do output
0000 0011                     device can do both
0000 0100                     supports software selected baud rate
0000 1000                     supports serial I/O
0001 0000                     supports XON/XOFF
--------------------------------------------
*Note : combinations of mode byte flags are used for each device,
such as :

   %0000 0011 + %0000 0100 + %0001 0000 = %0001 0111  

which means that the device can do both input and output, has
software selectable baud rates and supports XON/XOFF protocol.

Baud rate byte          function
--------------------------------------------
   0                          no baud rate
   1                          50 baud
   2                          75
   3                          110
   4                          135
   5                          150
   6                          300
   7                          600
   8                          1200
   9                          1800        Note: for all practical uses,
                                          the C-128 CP/M mode
   a                          2400        will not reliably support
                                          anything over 1200 baud
   b                          3600        because of software overhead.
   c                          4800
   d                          7200
   e                          9600
   f                          19200
----------------------------------------------
C-128 physical devices are: KEYS, 80COL, 40COL, PRT1, PRT2, 6551,
and RS232

BIOS_BASE+D7 to D8      pointer to DRVTBL (List of XDPH addresses). 
                        This address is returned by calling BIOS
                        function 22.  It points to FBD1 on DEC and
                        MAY versions and FB78 on AUG.

FC00 to FD00      INTBLOCK          This block contains all FD's.  It
                                    is the pointer to the main interrupt
                                    vector (FDFD).  A hardware quirk of
                                    the C-128 requires from FC00 to
                                    FD00 to be all FD's else the low
                                    byte of the interrupt pointer
                                    address will not be correctly
                                    specified on the Z-80 address bus.
                                    If you use this seemingly unused
                                    area for your own programs, it will
                                    crash on a random basis if an 
                                    interrupt occurs, unless you disable
                                    the interrupts first with a Z-80 
                                    'DI'  instruction.  BEWARE!!

PARMBLOCK         BIOS parameter working storage for passing to 8502
FD01              VICCMD      BIOS 8502 command to execute
FD02              VICDRV      device number to execute for printer, or 
                              for disk i/o:
   
                        bit value         drive

                        0000 0000         17xx expansion RAM disk
                        0000 0001         unit 8, drive 0   (default
                                          drive A: and E:)
                        0000 0010         unit 9, drive 0   (default
                                          drive B:)
                        0000 0100         unit 10, drive 0  (default
                                          drive C:)
                        0000 1000         unit 11, drive 0  (default
                                          drive D:)
                        1000 0001         unit 8, drive 1
                        1000 0010         unit 9, drive 1
                        1000 0100         unit 10, drive 1
                        1000 1000         unit 11, drive 1

FD03              VICTRK      track number to execute disk operations
                              on,  or secondary address for printer
                              operations
FD04              VICSECT     sector number for disk operations.  For
                              MFM disks side 1, use $80 + sector #
FD05              VICCOUNT    number of sectors to read/write for disk
                              I/O;  or number of characters to print
                              on printer; or low byte of address to
                              jump to for custom 8502 code.
FD06              VICDATA     various data/status items for disk and
                              printer; or high byte of address to jump
                              to for custom 8502 code.
FD07              CURDRV      current logical drive using device A: (0
                              = drive A:, 4 = drive E:)
FD08              FAST        drive type flags (updated after each
                              drive i/o operation), 
                              bit  = 1    drive is fast (1571 or 1581)
                              bit  = 0    drive is slow (1541 type)

                        bit         drive
                        ------------------------
                        0           A:  (device 8)
                        1           B:          9
                        2           C:         10
                        3           D:         11
                        4-7      (not currently used)

FD09              KEYTBL      pointer to key scan definition table
                              (1290)
FD0B              FUNTBL      pointer to function key table (1000)
FD0D              COLORTBL    pointer to logical color table (13F0)
FD0F              FUNOFFSET   offset to current function key (0 if
                              none)

FD10              SOUND1      parameters for ASCII bell sound
                              (CHR$(7)).  FD10 is output  to SID
                              register 5, FD11 to register 24.
FD12              SOUND2      FD12 is output to SID register 1, FD13
                              to register 6.
FD14              SOUND3      FD14 is output to SID register 4 to turn
                              on sound, then FD13 to register 4 to
                              turn it off.

The following storage locations are used by the general BIOS and
BDOS function calls.  Values for BIOS 8502 storage (FD01 etc
above) are extracted from here for use by the 8502 routines:

FD16              @TRK        track number used in BDOS and BIOS
                              routines
FD18              @DMA        address of disk data buffer
FD1A              @SECT       sector number used in BDOS and BIOS routines
FD1C              @CNT        number of sectors to read/write
FD1D              @CBNK       current bank  (0 or 1)
FD1E              @DBNK       bank for disk data buffer (0 or 1)
FD1F              @ADRV       absolute drive code (0 = A:, 1 = B:,
                              etc)
FD20              @RDRV       relative drive code (used to indicate
                              device number, same values as for VICDRV
                              outlined above)     

FD21              CCPCOUNT    # 128 byte records to load in CCP.COM
                              file, used during cold and warm boot
                              routines.

FD22              STATENABL   general purpose status flags:

                              bit   meaning when set to 1

                              7     allow 8 bit key codes (key values
                                    above $80 will not result in
                                    special functions defined in key
                                    scan table)
                              6     track cursor on 40 col screen when
                                    doing input on 80 col screen
                              5 to 1      (not used?)
                              0     display disk status on bottom line
                                    of screen.

FD23              EMULATION   pointer to screen emulation code address
                              (used to switch between VT100 and ADM31
                              modes on MAY version which has been
                              assembled with VT100 option enabled.  It 
                              can be pointed to custom code (in bank
                              0) for other types of emulation if
                              desired.)  Points to D0C2 on AUG, CE21
                              on DEC , CF2C on MAY, and CD31 on MAY-VT
                              for ADM-31 mode or CEB8 for VT-100
                              mode..

FD25              USARTADR    pointer to external 6551 address (DE00,
                              but not normally used)

FD27              INTHL       temporary storage for CPU registers
                              during 
FD3D              INTSTACK    interrupts, BDOS and BIOS calls, etc.
FD3F              HLTEMP
FD41              DETEMP
FD43              ATEMP

FD44              SOURCEBNK   source bank for inter-bank memory move 
                              (0 or 1)
FD45              DESTBNK     destination bank for inter-bank move   
                              (0 or 1)

FD46              MFMTBLPTR   pointer to MFM disk parameter table
                              (DPT), points to D876 on AUG, D6BD on
                              DEC,  D860 on MAY, and D891 on MAY-VT.

FD48              PRTCONV1    pointer to character conversion routine
                              for PRT1 printer (normally ASCII to
                              PETSCII), not used on AUG, points D0AE
                              on DEC,  D20F on MAY and D240 on MAY-VT.
FD4A              PRTCONV2    pointer to character conversion routine
                              for PRT2, normally the same as above.
FD4C              KEYFXFUNC   pointer to dispatch table for executing
                              extended key codes functions F0 to FF,
                              Not used on AUG, points to CB4C on DEC,
                              CC4F on MAY, and CA4F on MAY-VT.  This
                              table can be patched to add your memory
                              resident special functions, such as pop-
                              up routines and screen dumps.  Default
                              dispatch table values are:

            Key Code    Execution Vector
                        DEC         MAY         MAY-VT      Function

            F0          CB6C        CC6F        CA6F        disk status
                                                            line
            F1          CB8C        CC8F        CA8F        pause
            F2          CBBC        CCC0        CAC0        track cursor
            F3          CBC5        CCC9        CAC9        40 col screen
                                                            left
            F4          CBCD        CCD1        CAD1        40 col scrn
                                                            right
            F5          CBDC        CCE0        CAE0        unlock MFM
            F6          CBC4        CCC8        CB09        ADM 31 mode*
            F7          CBC4        CCC8        CB0E        VT 100 mode*
            F8          CBC4        CCC8        CAC8  (not normally used)
            F9          CBC4        CCC8        CAC8  (not normally used)
            FA          CBC4        CCC8        CAC8  (not normally used)
            FB          CBC4        CCC8        CAC8  (not normally used)
            FC          CBC4        CCC8        CAC8  (not normally used)
            FD          CBC4        CCC8        CAC8  (not normally used)
            FE          CBC4        CCC8        CAC8  (not normally used)
            FF          0000        0000        0000        reboot

* MAY VT version only.

Note:       the following RS-232 locations are only applicable to
            CP/M versions of DEC and later.  The AUG version does
            not support the RS-232 port.

FD4E              XXDCONFIG         RS-232 configuration register
FD4F              RS232STATUS       RS-232 status register
                                    bit   meaning

                                    7     0 = ready to receive data
                                          1 = not ready
                                    6     0 = idle   
                                          1 = busy
                                    5     0 = no data in buffer
                                          1 = data in buffer que
                                    4     1 = parity error
                                    3     1 = framing error
                                    2     1 = other error
                                    1     1 = receiving data
                                    0     1 = ready to send data

FD50              XMITDATA    RS-232 sending data buffer
FD5F              KEYGETPTR   Pointer into keyboard buffer for next
                              keypress to retrieve
FD61              KEYPUTPTR   pointer into keyboard buffer for
                              location to store next keypress
FD63              KEYBUF      keyboard buffer (16 bytes)
FD73              RXDBUFCNT   number of characters in RS-232 buffer
FD74              RXDBUFPUT   temporary storage for RS-232 variables
FD75              RXDBUFGET
FD76              RXDBUFFER   RS-232 data receiving buffer (60
                              characters)

FDFD              INTVECTOR   main entry point to interrupt routine
                              (jumps to F637 on AUG version, F517 on
                              DEC and MAY versions,)

FE00              @BUFFER     256 byte disk and general I/O buffer
                              used mostly by the RAM disk you can put 
                              your own code here if it is ok to
                              overwrite when  not in use

FF00              FORCEMAP    MMU configuration register
FF01              BANK0       force to MMU value of 3F
FF02              BANK1                               7F (default for TPA
                                                      operation)
FF03              IO0                                 3E
FF04              IO1                                 7E

FFD0              ENABLEZ80   8502 code to switch to Z-80 mode
FFDC              RETURNZ80

FFE0              ENABLE6502        Z-80 code to switch to 8502 mode
FFEE              RETURN6502

BANK 1 :    MMU configuration register value $7F, or preconfig
register #2 (FF02)

BANK 1 is the transient program bank.  All transient programs
operate in this bank. 

0000-0002         Jump to BIOS warm start entry BIOS_BASE + 3  

0004              high nibble =     current user number (0 to 0F hex)
                  low nibble =      current default drive (0 to 0F hex,
                                    0=A:, etc.)

0005-0007         Jump to BDOS entry point (address stored in 0006-
                  0007, points to EE06 on AUG, EA06 on DEC and MAY.)
                  Note: this address also marks the end of the TPA. 
                  It can be artificially lowered for use by resident
                  programs such as RSX's.

0008-004F         reserved for RST 1 to 7 functions but not normally
                  used in BANK 1.

(Note:      Locations 0050 to 007B are set automatically by the CCP
            when a transient program is loaded.  The transient
            program can then check this areas for parameters which
            may have been passed from the console in the form of a
            command tail.)

0050              drive from which latest transient program was
                  loaded, 1=A:, 2=B:, ... 16=P:

0051-0052         pointer to password of first operand in command
                  tail (points to a location in the CCP buffer
                  starting at 0080).  It is set to 0 if no password
                  specified.

0053              length of first password.  Set to 0 if no
                  password.

0054-0055         pointer to password of second operand in command
                  tail.  Set to 0 if no password specified.

0056              length of second password.  Set to 0 if no
                  password.

005C-007B         default parsed file control block (FCB) area:
           005C-006B          initialized from first command tail
                              operand
           006C-007B          initialized from second command tail
                              operand

(Note:      The FCB areas are normally 32 bytes long each.  Thus,
            the second FCB area must be moved to an unused area
            before the first FCB area can be used or else it will
            be overwritten.)

007C              current record position for default FCB 1.

007D-007F         current random record position for default FCB 1.

0080-00FF         default 128 byte disk buffer and CCP input buffer. 
                  On initial entry from CCP, 80 contains the number
                  of bytes in the command tail, and 81 onwards,
                  contains the actual command tail, including all
                  leading and trailing spaces that were entered on
                  the keyboard, all ending with a binary 0 byte.

0100-E9FF         58 k transient program area (TPA) DEC and MAY
                  versions
                  (0100-EDFF  59 k TPA on AUG version)

E000-FFFF         common with BANK 0 (top of TPA, also BDOS, BIOS,
                  etc.)

BANK 2 :    MMU configuration register value $3E, or preconfig
register #3 (FF03)
 
This bank, which I have arbitrarily called BANK 2, is mostly the
same as BANK 0 with the exception that the 40 column video color
and I/O are mapped into context:

1000 to 13FF      VICCOLOR    color map for 40 col screen

Note:       This bank must also be in context to access the MMU
            chip registers at D500 in the Z-80 I/O mapped area.

Z-80 I/O mapped area:

In addition to the normal memory mapping which includes RAM and
ROM, the Z-80 has another addressing mode which is called I/O
mapping.  This is used to access the chip registers and is
similar to memory mapping except the Z-80 IN and OUT instructions
must be used instead of LD type instructions.  The two most
commonly used ones are:
 
IN A,(C)    which will read the value of the I/O port (chip
            register) addressed by .BC into the .A register
OUT (C),A   which will write the value of .A to the I/O port
            addressed by .BC

In both cases, .BC is a 16 bit address and .A is an 8 bit value. 
The C-128 I/O chips appear at their normal address locations in
the I/O area as outlined below and can be programmed directly by
the experienced user.  Note that you must be careful when playing
with register values because CP/M expects most of them to be set
in certain ways.  Changing these settings may cause a system
crash.  If no chip register is present at the specified address,
the underlying RAM or ROM is written/read.

0000 to 0FFF                  image of RAM mapped down from D000 to
DFFF of BANK 0.

1000 to 13FF      VICCOLOR    color map for 40 col screen

Chip registers:

D000                    VIC

D400                    SID

D500                    MMU

D600                    8563 80 column chip

D800                    VICCH VIC 40 col color map
DC00                    CIA #1

DD00                    CIA #2

DE00                    external 6551 USART
           DE00 TXD6551    (send and receive data register)
           DE01 RESET6551  (write only)
           DE01 STATUS6551 (when read)
           DE02 COMMAND6551
           DE03 CONTROL6551

DF00                    RAM expander DMA controller chip

8502 mode

Surprisingly, the CP/M side of the C-128 also makes use of the
8502 side, including the KERNAL ROM's for some of the low level
I/O operations, especially serial port communication.  In 8502
mode, RAM from 0000 to 01FF is common between the banks.  Note
that this is different than normal C-128 mode which has common
RAM from 0000 to 03FF.  The most important implication of this
that the KERNAL JSFAR, JMPFAR, INDFET, INDSTA, and INDCMP
routines for bank manipulation cannot be used because they all
rely on code which is no longer in common RAM (it is above 0200). 
Once in 8502 mode, you can switch in the KERNAL and BASIC ROM's
by writing a value of 0 to the MMU configuration register, but
remember to switch them out again before returning to the Z-80.

Most of the memory map is similar to the Z-80 side with the
exception of the low end.  This low end area is very similar to
that used in normal C-128 mode except as noted below.

BANK 0 :    MMU configuration register value $3F, or preconfig
register #1 (FF01)

BIOS 8502 working storage
000A              current     printer device number
000B                          printer secondary address
000C                          disk drive data channel #
000D                          disk drive command channel #
000E                          disk drive device #
000F to 0012                  temporary storage pointers

0013 to 008F            unused zero page RAM where you can stash your
                        own 8502 code (pointers normally used in C-
                        128 mode, but not required in CP/M mode)

0090 to 00CA            KERNAL pointers required for disk and printer
                        I/O same as C-128 mode 

00CC to 00FF            normally unused zero page RAM

0100 to 0200            various KERNAL pointers, 8502 stack, etc. 
                        some unused locations but too chopped up to
                        put any custom code here.

0201 to 02FF            basically unused, you can put some of your
                        custom 8502 code here if you wish

0300 to 0333            system vectors  (same as C-128 mode)

0334 to 0361            unused?

0362 to 037F            logical file tables

0380 to 09FF            unused?

0A03                    FF=50 Hz, PAL; 0=60 Hz, NTSC

0A1C                    serial bus fast flag

Other areas up to 0FFF are used sporadically.  Large open spaces
exist in the cassette buffer (0B00 to 0BFF) and C-128 mode RS-232
buffers (0C00 to 0DFF).  These can be used for custom 8502 code.

1000 and up             common with Z-80 side in BANK 0.

The following area is used for the BIOS 8502 code when the 8502
is switched in during CP/M operations:

2600-2A40         BIOS8502    8502 BIOS code (all code here is in
                              standard 8502 machine language)

BIOS8502 function       Jump Table Entry        Points to code at

                        AUG   MAY/DEC           AUG         MAY/DEC
-1     reset            260F  2614              2625        262E
0     initialize        2611  2616              2654        265D
1     read 1541         2613  2618              2682        2690
2     write 1541        2615  261A              26B0        26BE
3     read 1571/81      2617  261C              26F9        2707
4     write 1571/81     2619  261E              26F6        2704
5     inquire disk      261B  2620              270E        271C
6     query disk        261D  2622              2740        274E
7     printer           261F  2624              2776        2784
8     format disk       2621  2626              27AC        27E2
9     user code         2623  2628              262B*       2634
a     17xx read         n/a   262A              n/a         2820
b     17xx write        n/a   262C              n/a         2823
-----------------------------------------------------------------

 * NOTE:    there is an error in the code at 262B of the AUG
            version. The byte value is $C3 and it should be $6C for
            a JMP (xxxx).  This means that 8502 BIOS subfunction 9
            (jump to custom user 8502 code) does not work on the
            AUG version unless you first correct this bug!!

BIOS8502  IRQ, BRK and NMI vectors point to 29AE on the AUG
version and 29F0 on the MAY and DEC  ver.  These point to dummy
code which does nothing.  Other I/O vectors are unchanged.

BANK 1 :    MMU configuration register value $7F, or preconfig
register #2 (FF02)

0000 to 01FF      common with BANK 0

0200 to FFFF      common with Z-80 memory map in BANK 1

Note:       You cannot normally access the CP/M TPA zero page or
            page 1 directly from 8502 mode because it is replaced
            by the BANK 0 common RAM when the 8502 is turned on.